本文共 2759 字,大约阅读时间需要 9 分钟。
class Outer{ class Inner { //成员内部类 }}
特点:
class Outer{ public void method() { final int a = 10; class Inner { System.out.println(a); //局部内部类 } } }
特点:
可以直接访问外部类的成员
在局部位置可以创建局部内部类对象,通过对象调用成员
注意: 局部内部类访问局部变量必须用final修饰 JDK1.8之后默认加上因为局部变量会随着方法的调用完毕而消失,这个时候,局部对象并没有立马从堆内存中消失,还要使用那个变量,为了让数据还能继续被使用,就用fianl修饰,这样,在堆内存里面存储的其实是一个常量值。
前提: 存在一个类或者接口;这里的类可以是具体类也可以是抽象类。
本质:是一个继承了该类或者实现了该接口的子类匿名对象public abstract class Person//抽象类 或 interface Person 接口{ public abstract void work(); } new Person(){ public void work() { System.out.println("work"); }}.work();
package laolao;class didi{ public static void main(String[] args) { new di(); new di.dada().eat(); }} class di { static int age=10; static class dada{ public void eat(){ int a = di.age; System.out.println(a); } }}
特点:
概述: 类层次结构的根类
所有类都直接或者间接的继承自该类
源代码: public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
源代码:public boolean equals(Object obj) { return (this == obj); }
注意:== 和 equals() 有什么区别?
==是一个比较运算符,他可以比较基本数据类,也可以比较引用数据类型,比较基本数据类型,比较的是两个值是否相同,比较引用数据类型,比较的是地址值是否相同。
equals() 是Object类中的方法,只能比较引用数据类型,比较的是两个对象的地址值是否相同
浅克隆的细节:
- 如果一个对象需要调用clone的方法克隆,那么该对象所属的类必须要实现Cloneable接口。
- Cloneable接口只不过是一个标识接口而已,没有任何方法。
- 对象的浅克隆就是克隆一个对象的时候,如果被克隆的对象中维护了另外一个类的对象,这时候只是克隆另外一个对象的地址,而没有把另外一个对象也克隆一份。
- 对象的浅克隆也不会调用到构造方法的。
public class MyTest { public static void main(String[] args) throws CloneNotSupportedException { Dog dog = new Dog("旺财", 3); Dog dog2 = (Dog) dog.clone(); dog2.name="小白"; System.out.println(dog2.name); System.out.println(dog2.age); }}class Dog extends Object implements Cloneable{ String name; int age; public Dog(String name, int age) { this.name = name; this.age = age; } @Override public Object clone() throws CloneNotSupportedException { return super.clone(); }}
转载地址:http://wdfki.baihongyu.com/