上一次开的第一篇博客就説要坚持每天一更的,但是因为自己本身的原因没有做到。但是从今天开始要坚持 ,无论多晚,无论发现什么都要今天比昨天进步一点才可以啊。
小白一个,要是有什么错误欢迎大家指出来帮助改进啊
内部类
总之看了很多博客説的就是有了内部类之后就可以解决java单继承,这点我现在也没有怎么理解,以后更理解的还是会继续修改的
成员内部类(编译完后产生class文件,名称 :外部类名称$内部类名称.class)
1 个人觉得就可以把它看成一个成员变量,可以用public ,protected,private "无 ",修饰,但是因为它叫成员内部类,不是静态内部类,所以我不能用static修饰。也可以用final,abstract修饰,就是像成员变量一样。
2 可以直接调用包含它的外部类的方法和变量(包括private成员和静态成员),可以有和外部类重名的变量和方法,
3 如果访问外部类的同名成员用 外部类.this.成员变量/方法
4 要创建成员内部类,必须先创建一个外部类。
5 内部类中的变量一样不能有static修饰,其他都可以
6 在内部类中访问外部类中与内部类同名的实例变量用外部类名.this.变量名
里面的每一个特点里,代码都能找到,见代码
代码见:https://github.com/dht12/CSDN/blob/master/InnerClass%201
注:加一占额外的东西,我也是学习了这么久才发现注意到的
1 在方法里不能再用public, private , " 无",修饰,不能用static ,abstract修饰,但是可以用final修饰的。
我觉得可以能因为方法里的变量本身只有在调用时方法本身才能使用,是局部变量,只能在方法本身才能使用,所以可以就没有必要有那些修饰符了。
2 在类中“private String name”不是可以定义这种全局变量么,在方法中使用它,但是在类中不可以给它进行二次赋值,因为是在类里面吧。方法里才可以给它赋值,但是可以赋值初值
public String name="dht";//编译不会报错
public String name;
name="dht";//编译会报错
3abstrack 不可以修饰变量,因为没有什么意义啊,!!!!!!!!!! (白痴我一定是)
4访问权限修饰符:public ,protected, "无 ",private,
局部内部类
局部就像局部变量的特性一样。是定义在一个方法/块的内部类,不可以有访问权限修饰符和static,但是可以用fianl abstrack
1 可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的
没有写代码,感觉费事还没有什么用
匿名内部类
匿名可以看成是局部内部类的一种吧。(它具有局部内部类的所有特点 )
Thread,用的就是匿名内部类
new Thread(new Runnable() { @Override public void run() { for(int i=10;i<20;i++){ System.out.println("a"+i); } } }).start();
1顾名思义匿名内部类没有名字,所以它也不能定义构造函数
2其中不能有static修饰的变量和方法。
3 必须继承/实现一个类/接口,但是不可兼得 ,一定是在new后面
4 不能是抽象的(这点和局部内部类不同),因为它必须要实现继承的类/实现的接口的所有抽象方法
代码 以后 补上
静态内部类
是用static修饰的,创建时不依靠于外部类
补充
java中的构造方法只能用访问权限修饰符修饰(public ,protected,private),不能用fianl ,synchronized,static ,native,abstract修饰
我的理解:构造方法一般都是在类实例化时调用,类就是用的修改各种变量,所以不能是final
synchronized一般是在线程上锁,对象上锁意义不大
static是在类加载的时候就会调用,如果一直不用实例化这个类,但是却在加载的时候就调用,内存消耗大
native是本地方法,abstract是抽象类,抽象类不能实例化
感觉写的非常的好的关于这方面的一篇文章,
https://blog.csdn.net/sinat_34344123/article/details/81942427