赞
踩
Final、权限 、内部类、引用类型
final: 不可改变。可以用于修饰类、方法和变量。
类:被修饰的类,不能被继承(太监类),那么其中所有的成员方法都无法进行覆盖重写。
方法:被修饰的方法,不能被重写。
变量(成员变量、局部变量):被修饰的变量,不能被重新赋值。局部变量中:“对于基本类型来说,不可变说的是变量当中的数据不可改变,对于引用类型来说不可变的是变量当中的地址值不可改变,地址中的内容可变。成员变量中:如果使用final关键字修饰,那么这个变量也照样时不可变。1、由于成员变量具有默认值,所以用了final之后必须手动赋值,不会再给默认值了。2、对于final的成员变量,要么使用直接赋值,要么通过构造方法赋值。二者选其一。3、必须保证类当中所有重载的构造方法,都最终会对final 的成员变量进行赋值。成员变量中没有set构造方法,因为不可重新赋值。
Java中有四种权限修饰符:如下图
内部类的定义:将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。
分类:(1)成员内部类(2)局部内部类(包含匿名内部类)
成员内部类的定义格式:
修饰符 class 外部类名称{
修饰符 class 内部类名称{
}}
注意:内用外,随意访问;外用内,需要内部类对象。
使用成员内部类有两种方式:
1、间接方式:在外部类的方法当中,使用内部类;然后main只是调用外部类的方法。
2、直接方式,公式:
类名称 对象名 =new 类名称();
【外部类名称.内部类名称 对象名 =new 外部类名称().new 内部类名称();】
内部类仍然是一个独立的类,在编译之后内部类会被编译独立的.class文件,但是前面冠以外部类的类名和$符号。比如,Person$Heart.class
若出现了重名现象,那么格式是:外部类名称.this.外部类成员变量名,具体如图:
注意
局部内部类和成员内部类的区别在于,局部内部类在方法里面,而成员内部类在方法外。
局部内部类定义和格式如下:
局部内部类只能自己在定义的时候实现,不能再方法外面定义。
类的权限修饰符小结:
public >protected>(default)>private
定义一个类的时候,权限修饰符规则:
1.外部类:public/(default)
2.成员内部类:public /protected/(default)/private
3.局部内部类:什么都不能写,不是代表default 。因为default 代表本包中可以访问,而局部内部类只能方法自己调用。包内其它方法不能用。
局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是有效final的。备注:从Java 8+开始,只要局部变量事实不变,那么final 关键字可以省略。
原因:
1.new出来的对象再堆内存当中。
2.局部变量是跟着方法走的,在栈内存当中。
3.方法运行结束之后,立刻出栈,局部变量就会立刻消失。
4.但是new出来的对象在堆当中持续存在,直到垃圾回收消失。
举例如图:
如果接口的实现类(或者是父类的子类)只需要使用唯一的一次,那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】。
匿名内部类的定义格式:
接口名称 对象名=new 接口名称(){
//覆盖重写所有抽象方法.
}
举例:
另外需要注意几点问题:
1.匿名内部类,在创建对象的时候,只能使用唯一一次。如果希望多次创建对象,而且类的内容一样的话,那么就必须使用单独定义的实现类了。
2.匿名对象,在调用方法的时候,只能调用唯一一次。
3.匿名内部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】
强调:匿名内部类和匿名对象不是一回事。
举例:
在实际的项目开发中,引用类型的使用非常重要,也是非常普遍的。我们可以在理解基本类型的使用方式基础上,进一步去掌握引用类型的使用方式。基本类型可以作为成员变量、作为方法的参数、作为方法的返回值,那么当然引用类 型也是可以的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。