内部类是在一个类内部再定义一个完整的类
内部类可以编译后生成独立字节码文件
内部类可以直接访问外部类的私有成员
内部类可以为外部类提供必要的内部功能组件
成员内部类(demo05)
在类内部定义,与属性和方法是同级别的类
在实例化内部类之前要先实例化外部类
public static void main(String[] args) {
Outer outer=new Outer();
Outer.Inner inner=outer.new Inner();
inner.show();
}
是当内部类和外部类属性重名时,优先访问内部类属性
如果要访问其中外部内属性可以加上Outerus.this
成员内部类中不能定义静态成员,但可以定义静态常量
静态内部类(demo06)
不依赖外部类对象,可以直接创建或直接用类名访问,可以声明静态成员
如果要在静态内部类中访问外部类属性需要在内部类中实例化外部内对象,然后调用。
静态内部类调用自己的静态成员和非静态成员可以直接调用
public class Outer {
private String name="cs";
private int age=23;
static class Inner{
private String address="sh";
private String phone="123";
private static int count=1000;
public void show(){
Outer outer=new Outer();
System.out.println(outer.name);
System.out.println(outer.age);
System.out.println(Inner.count);
System.out.println(address);
System.out.println(phone);
System.out.println(count);
}
}
}
局部内部类(demo07)
定义在外部内方法中,只能作用于当前方法
局部内部类前不能加任何修饰符
局部内部类无法直接访问当前方法中的局部变量,可将其定义为常量进行访问
在局部内部类中可以直接访问外部类和内部类的属性
如果要访问局部内部类中的方法必须在当前方法中实例化内部类对象再执行,否则使用外部类中包含内部类的方法时无法执行内部类中的方法。
public class Outer {
private String name="cs";
private int age=20;
public void show(){
String address="sz";
class Inner {
private String phone="1113250240";
private String email="[email protected]";
public void show2(){
//访问外部类属性
System.out.println(name);
System.out.println(age);
System.out.println(phone);
System.out.println(email);
System.out.println();
//访问局部变量
System.out.println(address);//address为常量
}
}
Inner inner=new Inner();
inner.show2();
}
}
匿名内部类
必须继承一个父类或者实现一个接口
是定义类、实现类、实例化对象的语法合并,只能实例化一次。
public static void main(String[] args) {
//成员内部类
/* UsbService usbService=new Mouse();
usbService.service();
class Fan implements UsbService{
@Override
public void service() {
System.out.println("连接成功,风扇开始转动");
}
}*/
UsbService usbService=new UsbService() {
@Override
public void service() {
System.out.println("连接成功,风扇开始转动");
}
};
usbService.service();
}
Obeject类(demo09)
所用类的直接或间接父类,位于继承树顶层
Obeject类中定义的方法,是所有类都具备的方法。
getClass()方法可以返回引用中存储的实际对象类型.通常用于判断两个对象是否一致
hashCode()方法方法返回对象的哈希值
哈希值是根据对象的地址或者字符串或数字使用hash算法计算出来的int类型的数值
一般情况下相同对象返回相同哈希值
toString()方法
返回该对象的字符串表示
可将程序覆盖展示对象的各项属性
@Override
public String toString() {
return name+";"+age;
}
equals()方法
比较两个对象地址值是否相同
可将equals()方法覆盖比较各个属性值是否相同
@Overridepublic boolean equals(Object obj) {
//判断两个对象是否指向同一个地址
if(this==obj){
return true;
}
//判断obj是否为空
if(obj==null){
return false;
}
//判断两个引用指向的对象类型是否一致。还可用instanceof来判断
if(this.getClass()==obj.getClass()){
Students s=(Students) obj;
//比较属性
if(this.name.equals(s.getName())&&this.age==s.getAge())
return true;
}
return false;
}
finalize()方法
当对象被判定为垃圾对象时,由JVM自动调用此方法,用来标记对象,进行回收。
垃圾对象是指没有被有效引用指向的对象
垃圾回收:由GC销毁垃圾对象,释放存储空间。
使用System.gc()手动回收。
标签:常用,内部,对象,System,println,out,String From: https://www.cnblogs.com/zlsame/p/16709541.html