对于匿名对象,内部类这块的理解

一,匿名对象

1.什么是匿名对象以及匿名对象的使用环境

平常我们所实例化的对象可以重复使用,但是匿名对象,因为没有变量名所以只能使用一次,总的来说,匿名对象真实存在,但我们却无法明确的指出他来,所以他只能在创建之初使用一次。

使用环境:当我们想要通过一个对象仅仅调用一次某个方法时我们就可以使用匿名对象,局限性较大,用的不好就会造成代码量比不用还多的情况

2.格式(通过代码来看看使用正常对象和匿名对象之间的不同之处)

package it.cast.demo10;

public class Rain {
   public void sos() {
       System.out.println("七月的风,八月的雨");
   }
}

package it.cast.demo10;

public class Test {
   public static void main(String[] args) {
       new Rain().sos();   //这是匿名后
       Rain  s=new Rain();
       s.sos();     //这是没有使用匿名
}

}

3.谈谈对于匿名对象的理解吧。。。

从上面代码可以看出一个匿名对象的格式是 : new  类名(),他只与我们正常实例化差一个变量名,其实在这个过程中,系统已经完成了在堆内存中对于这个对象的开辟,该对象在堆内存也有地址,指向这个对象,这点和正常对象是一样的,并且他们在堆内存中所拥有的内容也一样,所以他可以调用方法。

但是我们应该知道变量名是存在于栈内存中的,且这个变量名存储对象的地址,我们调用时也是通过这个地址在堆内存中找这个对象数据的,但是现在对于匿名对象来说他仅仅拥有地址,却没有存储他地址的变量,也就是说没有可以指向他堆内存的东西,所以他只能在出生时使用一次,也只有这次可以说清楚他的地址。(自己想的,可能有很大纰漏,但我觉得是有一定合理性的。。。。)

二.内部类

一.成员内部类

1. 定义:在一个类中,将另一个类定义在外部成员位置,另一个类就叫成员内部类

2.性质

1.可以使用成员修饰符

2.拥有类的特性,可以实现接口,继承

3.可以使用外部类成员,包括私有的成员

3.实例化公式

new    外部类名().new    内部类名().方法(参数)

4.成员内部类的同名变量调用(通过代码看吧。。)

public class Demo {
    private int a=6;
    class Demo1{
        int a=7;
        public void function() {
                   int a=8;
            System.out.println(a);
            System.out.println(this.a);
            System.out.println(Demo.this.a);     //输出外部类的a
        }
    }
}

public class Test1 {
 public static void main(String[] args) {
       new Demo().new Demo1().function();                 //调用内部类方法
}
}

结果:    8
         7
         6

二.局部内部类

1.局部内部类定义

在一个外部类中,将一个类定义在其方法中,成为局部内部类

2.性质

1.同上

2.可以定义重名的局部内部类(把它看成局部变量就可以很好地理解了)

3.局部内部类的调用(通过代码来说明)

public class Outer {
   public void out() {
       class Inner{
           public void inner() {
               System.out.println("局部内部类方法");
           }
       }
       new Inner().inner();
   }
}

public class Test {
   public static void main(String[] args) {
       new Outer().out();
}
}

这块一定要注意我们需要实例化一下内部类,并且其位置是在类之外,方法之中。  理解的话。。。。我是把外层方法看做main方法了,对于这个局部内部类,他是存在于方法内部的,

且其位置是方法套方法这种,无法直接调用,所以需要先实例化一下。   然后其实外部方法里面的类都是没有实际意义的,因为他并不是真实存在的,只有实例化之后才能真正算作方法的内容。

三.匿名内部类

1.匿名内部类的定义

其实就是对于子类继承(接口实现)并且实例化的过程的一个简化。

2.使用条件

一定要有子类继承或者接口实现这种情况才可以使用匿名内部类

3.格式

new   父类类名(){

重写方法

};

4.实现过程(同样是用代码来实现)

public abstract class Men {
    public abstract void somking();
}

public class Test {
public static void main(String[] args) {
      new Men(){
        public void somking() {
            System.out.println("我喜欢吸烟");
        }
        public void eat() {
            System.out.println("我喜欢吃饭");
        }
    }.somking();;
}
}

原文地址:https://www.cnblogs.com/roseneverdie/p/10124771.html

时间: 2024-10-18 01:44:43

对于匿名对象,内部类这块的理解的相关文章

匿名对象,内部类,包的声明与访问,访问修饰符,代码块,java的API equals toString方法整理

匿名对象  匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. public class Person{ public void eat(){ System.out.println(); } }创建一个普通对象person p=new person();创建一个匿名对象new person(); 匿名对象的特点: 1创建匿名对象直接使用,没有变量名. new Person().eat() //eat方法被一个没有名字的Person对象调用了. 2,匿名对象在没有指定其

匿名对象+内部类

匿名对象 普通的类对象在使用时会定义一个类类型的变量,用来保存new出来的类所在的地址.而匿名类取消掉了这个变量,这个地址由编译器来处理,并且在new出来之后,它占用的内存会有JVM自动回收掉.后续无法再使用了.例如 public class Student{ public void classBegin(){ System.out.println("good morning teacher!"); } } new Student().classBegin(); 匿名对象最常用的方式是

匿名对象 内部类 包的声明与访问 访问修饰符

匿名对象       没有变量名,只能使用一次对象,可以作为方法接收的参数.方法返回值使用 内部类 分为成员内部类与局部内部类 匿名内部类     匿名内部类是创建某个类型子类对象的快捷方式 使用匿名对象的方式,将定义子类与创建子类对象两个步骤由一个格式一次完成,.虽然是两个步骤,但是两个步骤是连在一起完成的 package com.orcle.demo03; //外部类 public class Out { //外部类方法 public void outt(){ System.out.prin

匿名对象+内部类+包

匿名对象 匿名对象的概念 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 匿名对象的特点 1.创建匿名对象直接使用,没有变量名. 2. 匿名对象在没有指定其引用变量时,只能使用一次. 3.匿名对象可以作为方法接收的参数.方法返回值使用 内部类 内部类概念  什么是内部类: 将类写在其他类的内部,可以写在其他类的成员位置(类里面)和局部位置(方法里面),这时写在其他类内部的类就称为内部类.其他类也称为外部类. 什么时候使用内部类: 在描述事物时,若一个事物内部还包含

匿名对象,封装,构造代码块、静态代码块、内部类、匿名内部类

匿名对象:没有引用类型变量指向的对象就称为匿名对象. 匿名对象的主要作用:简化书写 匿名对象主要用于两种应用场景: 1.如果一个对象的方法只会调用一次的时候,然后该对象就不再使用了,这时候就可以使用匿名对象 2.作为参数传递 封装的步骤: 1.私有化要封装的属性 2.根据需求提供对应的get或set方法 封装的好处: 1.提高了数据的安全性 2.操作简单 3.隐藏了实现 封装一定会用上的场景:如果是实体类的属性,在开发过程中,全部都会封装起来 构造代码块:创建一个对象的时候,给对象进行统一的初始

Java基础学习笔记十 Java基础语法之final、static、匿名对象、内部类

final关键字 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后,就可以对其中的方法进行重写,那怎么解决呢?要解决上述的这些问题,需要使用到一个关键字final,final的意思为最终,不可变.final是个修饰符,它可以用来修饰类,类的成员,以及局部变量. final的特点 final修饰类不可以被继承,但是可以继承其他类. class Yy {} final clas

C++中引用和匿名对象的理解和本质剖析

引用是什么? 引用其实就是给变量起的一个别名,使用这个别名跟使用变量名没有区别. 那什么又是变量名呢? 变量名实质上是一段连续存储空间的别名,是一个标号(门牌号),编译器通过变量来申请并命名内存空间,程序员可以通过变量的名字可以使用存储空间. 也可以这样理解,变量名是逻辑概念,变量是物理层面,变量含数据类型和数据值,数据类型决定内存的分配,编译器将变量名和变量对应的内存联系起来,使程序员可以通过变量名来操作内存. 引用怎么用?    语法:Type& name = var; 规则:1.普通引用在

Java——面向对象进阶(final关键字,static关键字,匿名对象,内部类,包的声明与访问,四种访问修饰符,代码块)

一.final关键字 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后,就可以对其中的方法进行重写,那怎么解决呢? 要解决上述的这些问题,需要使用到一个关键字final,final的意思为最终,不可变.final是个修饰符,它可以用来修饰类,类的成员,以及局部变量. 1.修饰类 被final修饰的类不可以被继承,但是可以继承其他类. class Yy {} final cl

java 匿名对象,内部类,修饰符,代码块

匿名对象是在建对象时只有创建对象的语句方法而没有把对象的地址赋值给变量,匿名对象只能调用一次方法,想再调用时需要再创建一个新的匿名对象 创建普通对象:Person p =new Person(); 创建匿名对象:new Person().方法名(); new Person().setName("王无"); 内部类:写在其他类的内部或者成员位置或局部位置,这是其他类叫外部类.在内部类中可以访问外部类的属性. 当内部类写在成员位置时,叫成员内部类,写在局部位置时,叫局部内部类. 成员内部类