Java知识点补充1
1.反射获取到Class类的3种方式
-
Class.forName("类的路径")
-
类名.class
-
实例.getClass()
2.Java创建对象的方式有4种
-
通过new语言实例化一个对象
-
通过反射机制创建对象
-
通过clone()方式创建一个对象
-
通过反序列化创建对象
3.内部类4种
-
C++中说法为嵌套类,Java说法为内部类
-
静态内部类
-
成员内部类
-
局部内部类
-
匿名内部类
(1)静态内部类
-
声明static的内部类
-
不能访问外部类的普通成员变量
-
只能访问外部类的静态成员和静态方法
class outerClass{ static class innerClass{} //静态内部类 }
(2)成员内部类
-
非静态内部类
-
可以获得外部类的所有属性和方法
-
不可以定义静态属性和方法
class outerClass{ class innerClass{} //成员内部类(普通内部类) }
(3)局部内部类(很少使用)
-
定义在代码块内部的类,类似于变量
-
不能被public、protected、private以及static修饰
-
能访问外部类的所有属性和方法
-
只能访问方法中的final类型局部变量
class outerClass{ public void mothed(){ class innerClass{} //局部内部类 } }
(4)匿名内部类
-
没有类名的内部类
-
不能使用class、extends、implements
-
不能有构造函数
-
不能定义静态成员、方法和类
-
不能是public、protected、private、static
-
只能创建匿名内部类的一个实例
-
一个匿名内部类一定在new后面,且必须继承一个父类或实现一个接口
-
匿名内部类是一个局部内部类,所以局部内部类的所有限制都生效,例如只能访问方法中的final类型局部变量
为什么必须是final类型的局部变量:
-
首先final类型的局部变量在编译器就解析完成一直保留,然后例如下面案例在方法中创建一个线程,当方法执行完毕之后非final的变量都被销毁了,那么线程中的变量如果不是final类型就会出错,为了避免这一点所以必须为final类型
-
https://www.cnblogs.com/hwaggLee/p/4492425.html
class outerClass{ public void mothed(){ Thread tread = new Thread(new Runnable() { //匿名内部类 @Override public void run() { } }); } }