JAVA学习日记每天进步一点点之类的高级特性

java类包

  • 类名冲突问题:每定义好一个类编译完之后,都会生成一个.class的文件。所以为了防止类名相同产生冲突,将类打包成包,类似装到文件夹中,不同文件夹下的相同类名的文件也是不一样的!
  • 完整的类的路径:包名.类名
    例子:java.lang.math为java.lang包下的math类 实例化对象完整的格式为:java.lang.math a =new java.lang.math(); (同一个包里面的类互相访问不需要指定包名) 若 java.other.math此时math类与之前不同。
  • 包名的命名规则:全部小写;为了避免包名冲突,通常采用Internet域名的反写:com.lzw
  • 导入包:import关键字:import com.lzw.*;//com.lzw包中的所有类在此段程序里面都可以使用
    import com.lzw.math;//此段程序可以使用com.lzw.math类

final

  • final变量:变量一旦被final设定,就没办法改变变量的值。对象如果用final修饰,则对象引用只能指向唯一一个对象。用static final修饰常量,只可以在定义的时候赋值,值不会发生改变。
  • final方法:final方法不可以被重写;同时我们知道private修饰的方法只能在本类使用,不可以被调用!因此定义为private的方法默认为final的。
  • final类:final类不可以被继承

内部类

  • 成员内部类:
    内部类对象不能直接获得,只能由外部类的对象获取。
    如下代码所示:内部类的实例是绑定在外部类的实例上的,需要先创建一个外部类的对象,然后使用外部类的对象创建内部类的对象。
    其中:当外部类和内部类有相同属性时,在内部类中会优先输出内部类的属性,只有通过外部类的对象来调用相同变量属性才会输出外部类的属性。在内部类中,使用this,可以获取内部类的属性。
public class OuterClass {
	public static void main(String[] args) {
		int i=20;
		OuterClass a=new OuterClass();
		OuterClass.InnerClass b=a.new InnerClass();
		b.OutPut();
	}
		private class InnerClass{
			int i=19;
			public void OutPut() {
				System.out.println("内部变量为"+this.i);
				System.out.println("外部变量为"+OuterClass.this.i);
			}
		}
}
  • 局部内部类
    在类的成员方法或者作用域里面定义的内部类。
    其中:内部类是方法体的一部分,所以方法外不能访问此局部类,但是内部类可以访问此代码段的常量以及外部类的所有成员。

  • 匿名内部类
    首先我们定义一个接口,然后在返回接口类型的方法里面,返回一个接口类型,语法为:return new 类名{…},在大括号里面插入定义内部类的代码,也解释接口的应用。

interface abcd{
	
}
public class OuterClass {
	int i=20;
	public abcd  doit() {
		return new abcd() {
			private int i=0;
			public int getnumber() {
				return i;
			}
		};```

                                        
   

你可能感兴趣的:(JAVA学习日记每天进步一点点之类的高级特性)