精华内容
下载资源
问答
  • Java匿名类对象

    2020-04-01 12:06:30
    匿名类对象(不是匿名类,是匿名类对象 ,读:匿名 类对象) 创建的类的对象是匿名的 当我们只需要一次调用类的对象时,我们就可以考虑使用匿名类对象。 (同时也只能够调用一次,因为没有名字,无法进行二次调用,...

    匿名类对象(不是匿名类,是匿名类对象 ,读:匿名 类对象)
    创建的类的对象是匿名的
    当我们只需要一次调用类的对象时,我们就可以考虑使用匿名类对象。
    (同时也只能够调用一次,因为没有名字,无法进行二次调用,在创建的同时进行调用一下。
      如果再想调用必须通过名字,但是又没有名字,所以只能调用一次)
       eg:

       p.printAreas(new Circle,6);
       Syetem.out.println(new Circle.getRadius());//0.0


       输出结果我们需要通过Circle 类对象来调用getRadius方法来进行输出,但是没有类名字。所以无法输出。

    PS:一般new 对象 ,对象名会存储在栈空间,new出来的空间会在堆空间。而匿名类没有名字,所以没有存储在栈空间,只存在堆空间,在使用过之后,由于没有其他引用就会被java自动回收。

    谨记:调用方法之后可以直接输出结果的,全部都是在方法中写了输出语句。和get set没有关系,和return 也没有关系。
    没有意外的情况下,或者可以说绝对情况下,拥有返回值的方法都不能够输出语句,因为返回值语句最后需要return一个返回值。
    所以,能够输出语句的方法都是void方法。

    展开全文
  • java匿名类对象的使用

    千次阅读 2018-10-10 23:38:31
    java匿名类对象的的使用 要点 1.创建的类对象是匿名的 1. 当我们只需要一次调用类的对象的时候,我们就可以考虑使用匿名类的创建方式创建匿名类对象。 2. 创建的匿名类对象只能够调用一次! 2.匿名类只能够...

    1.创建的类对象是匿名的

    1. 当我们只需要一次调用类的对象的时候,我们就可以考虑使用匿名类的创建方式创建匿名类对象。
    2. 创建的匿名类对象只能够调用一次!
    

    2.匿名类只能够调用一次的原因

    1.创建的时候只在jvm的堆空间新建了对象,并进行初始化,但栈空间没有一个变量名指向匿名对象。
    2. jvm垃圾回收机制在发现堆空间的对象,没有一个引用指向他,就给回收内存了。
    

    3.demo

    //在出输出的时候,直接new一个Date();
    System.out.print(new Date());
    
    展开全文
  • 恰饭广告匿名对象:没有名字的对象。非匿名对象:ClassName c=new ClassName();c.run();匿名对象:new ClassName().run();注意事项:1、当对象对方法仅进行一次调用的时候,就可以简化成匿名对象。2、两个匿名对象不...

    版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创!

    恰饭广告

    匿名对象:没有名字的对象。

    非匿名对象:

    ClassName c=new ClassName();

    c.run();

    匿名对象:

    new ClassName().run();

    注意事项:

    1、当对象对方法仅进行一次调用的时候,就可以简化成匿名对象。

    2、两个匿名对象不可能是同一个对象。

    3、一般不给匿名对象赋予属性值,因为永远无法获取到。

    4、运行一次,直接就被回收掉了,节省内存空间。

    匿名对象使用的代码例子:

    public class Anony{

    int a=1;

    int b=2;

    void run(){

    System.out.println(a+b);

    }

    public static void main(String[] args){

    new Anony().a=10; //匿名对象不能重新赋值,赋值仍然失效

    Anony a=new Anony();

    a.run(); //通过创建对象的方式去调用方法

    new Anony().run(); //匿名创建对象并调用方法

    }

    }

    运行结果:

    3

    3

    匿名内部类:匿名内部类也就是没有名字的内部类。

    格式:

    ClassName object=new ClassName(){

    /*代码块*/

    };

    注意事项:

    1、匿名内部类必须继承一个父类或实现一个接口。

    抽象类代码例子:(接口同理)

    abstract class AnonyTest{

    int a=1;

    int b=2;

    public abstract void run();

    }

    public class AnonyInner{

    public static void main(String[] args){

    AnonyTest a=new AnonyTest(){ //抽象匿名类

    public void run() {

    System.out.println(a+b);

    }

    };

    a.run();

    }

    }

    如果不使用匿名内部类来实现抽象方法:

    abstract class AnonyTest{

    int a=1;

    int b=2;

    public abstract void run();

    }

    class AnonyDemo extends AnonyTest{

    public void run() {

    System.out.println(a+b);

    }

    }

    public class AnonyInner{

    public static void main(String[] args) {

    AnonyTest a=new AnonyDemo(); //上转对象

    a.run();

    }

    }

    运行结果:

    3

    让我恰个饭吧.ヘ( ̄ω ̄ヘ)

    支付宝 ——————- 微信

    恰饭广告

    b2fa10417bcbd2c397d3c42ce544672e.gif

    展开全文
  • 这几天与在某群与群友讨论了Runnable匿名对象导致内存泄漏的相关问题,特此记录一下。示例代码如下:packagecom.memleak.memleakdemo;public class Leaker {String valueToRead= "Hello world";public ...

    这几天与在某群与群友讨论了Runnable匿名对象导致内存泄漏的相关问题,特此记录一下。

    示例代码如下:

    packagecom.memleak.memleakdemo;public class Leaker {

    String valueToRead= "Hello world";public voiddoSomething()

    {

    Thread bgThread= newThread(newRunnable()

    {public voidrun() {while (true)

    {

    System.out.println("Running... ok");try{

    Thread.sleep(1000);

    }catch(InterruptedException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    }

    );

    bgThread.start();

    }

    }

    Main函数:

    packagecom.memleak.memleakdemo;/*** Hello world!

    **/

    public classApp

    {public static voidmain( String[] args )

    {

    Leaker l= newLeaker();

    l.doSomething();

    }

    }

    问题出在哪?

    启动此程序,main函数对应的线程在调用Leaker之后,应该退出了,后台只有一个Runnable在执行,理论上此时Leaker对象没有任何东西引用,此时应该被GC才对,但是如果使用visualVM查看下内存:

    1d34d1511c75d0c79f48e219b1ddfb32.png

    即使强制GC之后,此对象依旧存在,说明发生了泄露。

    在上面图中的例子使用了一个匿名的Runnable对象,如果将此Runnable改为一个显式声明的对象,如下例子所示:

    packagecom.memleak.memleakdemo;public class CauseLeakerNotToLeak implementsRunnable {public voidrun() {while (true)

    {

    System.out.println("Running... ok");try{

    Thread.sleep(1000);

    }catch(InterruptedException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    }

    LeakerSolved.java

    packagecom.memleak.memleakdemo;public classLeakerSolved {

    String valueToRead= "Hello world";public voiddoSomething()

    {

    Thread bgThread= newThread(newCauseLeakerNotToLeak()

    );

    bgThread.start();

    }

    }

    通过VisualVM则会发现已经不再泄露了:

    4980be224365c0d634f749625cc8d376.png

    当然,如果使用Java 8带的Lambda表达式:

    packagecom.memleak.memleakdemo;public classLeakerLambda {

    String valueToRead= "Hello world";public voiddoSomething()

    {

    Thread bgThread= new Thread(() -> {while(true) {

    System.out.println("Running... ok");try{

    Thread.sleep(1000);

    }catch(InterruptedException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }

    }});

    bgThread.start();

    }

    }

    也能解决这个问题:

    56f3ff5379914d41e1bb0bf70a684908.png

    结论:

    在创建线程的时候一定要谨慎使用匿名Runnable对象,最好使用命名对象或者Lambda表达式代替。

    展开全文
  • 如果接口的实现(或者父类的子类)只需要使用唯一的一次那么这种情况下就可以省略掉该的定义,而改为使用[匿名内部]匿名内部接口名称 对象名 = new 接口名称(){//覆盖重写所有抽象方法};对格式"new 接口名称(){...
  • 1、首先匿名内部要继承自抽象基类或者实现基类接口like thisabstract class Seed{int cnt;public Seed(int x){cnt=x;}abstract void showInfo();}class Apple{int num=300;public Seed getSeed(final int x){...
  • 匿名对象:没有名字的对象。非匿名对象:ClassName c=new ClassName();c.run();匿名对象:new ClassName().run();注意事项:1、当对象对方法仅进行一次调用的时候,就可以简化成匿名对象。2、两个匿名对象不可能是同...
  • 匿名对象:没有名字的对象。非匿名对象:ClassName c=new ClassName();c.run();匿名对象:new ClassName().run();注意事项:1、当对象对方法仅进行一次调用的时候,就可以简化成匿名对象。2、两个匿名对象不可能是同...
  • 匿名对象匿名对象的特点创建匿名对象直接使用,没有变量名。new Person().eat() //eat方法被一个没有名字的Person对象调用了。匿名对象在没有指定其引用变量时,只能使用一次。newPerson().eat(); 创建一个匿名对象...
  • 匿名对象的概念匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。例如:public classPerson{public voideat(){System.out.println();}}创建一个普通对象Person p = new Person();...
  • 一、匿名对象1、概念匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。public classPerson{public voideat(){System.out.println();}}Person p= new Person();//创建一个普通对象new...
  • 匿名内部其实就是一个匿名 子类对象。格式:new 父类对象 or 接口(){子类内容;(覆盖父类的, 而且可以增加自己的方法)}//相当于将 继承父类 和 new 的过程 写到了一起有某有!很方便有某有!*/class Outer{int ...
  • 匿名对象指的是在创建对象是,只有创建对象的语句,却没有吧对象的地址只附给某个变量 也就是说这个对象值使用一次。例如 Person p=new Person();这是普通创建对象的方法。 不要前面的变量直接写new Person()这就...
  • 内部的介绍定义在另外一个中的,叫内部成员内部1..new 创建成员内部必须先创建外部的实例,然后通过.new 创建内部对象2..this 可以通过外部的类名.this去访问外部的所有属性和方法。...
  • java匿名类与匿名对象

    2018-06-13 15:58:48
    一、匿名对象 匿名对象是没有名字的实体,也就是该实体没有对应的变量名引用 匿名对象的特征: 创建的匿名类对象只能够调用一次 匿名对象只在堆内存中开辟空间,而不存在栈内存的引用 每次创建匿名对象都是...
  • 本篇文章给大家详细讲解了Java匿名对象与匿名内部的相关知识点,有兴趣的读者一起学习下。
  • 转载自:https://www.jianshu.com/p/9335c15c43cf /** * @author hgl * @data 2019年1月10日 * @description 接口 */ ... } } public void classMethod(){ System.out.println("匿名内部调用了外部方法"); } }
  • JAVA-匿名类对象

    2018-05-15 22:23:41
    匿名类对象:创建的类的对象是匿名的。 1)当我们只需要一次调用类的对象时,我们可以考虑使用匿名的方式创建类的对象。 2)特点:创建的匿名类的对象只能够调用一次堆空间中就存在该类的实体,但由于没有对象在栈...
  • 匿名类创建的对象就具有继承的父类或实现的接口的特性。匿名对象也就是没有对象名的对象,我们定义对象时通常给对象定义一个名称称为对象名或对象的引用或对象变量,以便程序调用时根据对象名称类访问。但匿名对象...
  • 外部类要使用内部类成员,必须建立内部类对象 举例: 内部类Inner()可以调用外部类Outer()的成员变量a 外部类Outer()调用内部类成员的格式: 外部类名.内部类名 变量 = new 内部类对象(); 变量.内部类方法() ...
  • 一、匿名对象 ... 创建的匿名类对象只能够调用一次 匿名对象只在堆内存中开辟空间,而不存在栈内存的引用 每次创建匿名对象都是不同的对象 package com.yyx.pratice; public class...
  • Java 匿名对象类

    2020-02-11 14:40:12
    匿名对象类:创建的对象没有名字; 作用:当只需要调用一次的时候可以使用; 代码: public class Main { public static void main(String[] args) { new min().show(); new min().height(2); } } class ...
  • /*匿名对象:就是没有名字的对象匿名对象的应用场景:A:调用场景,仅仅只调用一次的时候。注意:调用多次的时候,不合适、那么,这种匿名调用有什么好处吗?有,匿名对象调用完毕就是垃圾。可以被垃圾回收器回收。...
  • 1.产生原因:使用接口需要定义来实现,而... 匿名内部是省略了【实现/子类名称】,但是匿名对象是省略了【对象名称】 4…强调:匿名内部匿名对象不是一回事!区别如下: Ⅰ . 匿名内部匿名对象:如 ne
  • 对象、封装、继承、重写、委托等等,有没有感觉到生疏呢?今天带大家来点基础的,希望可以帮助新老程序员们,大神请让绕道。主题由来《Thinking in Java》中有这么一段代码:public class Parcel7 {public Contents ...
  • java匿名内部:1:匿名内部,匿名内部也就是没有名字的内部。2:匿名内部的作用正因为没有名字,所以匿名内部只能使用一次,它通常用来简化代码编写。3:匿名内部的实现匿名内部的两种实现方式:第...
  • 先上一段经典匿名类代码来个印象,...1、定义匿名类主要是在有特殊需要的时候创建一个对象来执行特定的任务,可以使代码更加简洁。匿名类是不能有名字的类,它们不能被引用,只能在创建时用 new 语句来声明它们。使...
  • /** * @Author: YuShiwen * @Date: 2020/11/18 2:06 PM * @Version: 1.0 ... //非匿名类 的 非匿名对象,即类名为Freshman,对象名为:freshman Freshman freshman = new Freshman("Mr.Yu",18);

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,100
精华内容 2,040
关键字:

java匿名类对象

java 订阅