02静态非静态、类
02.静态非静态、类-18/07/10
- 1.非静态的成员方法,既可以访问静态成员也可以访问非静态; 静态的成员方法,只可以访问静态成员,不可以访问非静态。
- 2.在静态方法中是没有this关键字的
- 如何理解呢?
- 静态是随着类的加载而加载,this是随着对象的创建而存在。
- 静态比对象先存在。
- 如何理解呢?
- 3.如果一个类中所有方法都是静态,要将构造方法私有,目的是不让其他类创建本对象,直接用类名,调用即可。arrayTool.print();
- 4.通过javadoc命令生成说明书
- @author(提取作者内容)
- @version(提取版本内容)
- javadoc -d 指定的文件目录 -author -version ArrayTool.java
- @param 参数名称//形式参数的变量名称@return 函数运行完返回的数据
- 5.获取随机数的方法
- public static double random():返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
- 6.获取一个1-100之间的随机数
- int number = (int)(Math.random()*100)+1;
- 7.this.成员方法 调用本类的成员方法,也可以调用父类的方法; super.成员方法 调用父类的成员方法
- 8.构造代码块(在类中方法之外)每创建一次就会执行一次,优先于构造函数执行
- 9.静态代码块随着类的加载而加载,只执行一次,优先于主方法实行
- 10.子类重写父类方法时,访问权限不能更低,最好就一致。 父类静态方法,子类也必须通过静态方法进行重写
- 11.方法重写(Override):子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的。 方法重载(Overload):本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关。
- 12.final修饰特点
- 修饰类,类不能被继承
- 修饰变量,变量就变成了常量,只能被赋值一次
- 修饰方法,方法不能被重写
- 13.final关键字修饰局部变量:引用类型,是地址值不能被改变,对象中的属性可以改变
- 14.多态中的成员的成员变量(Father f = new Son();)
- 编译运行都看父类
- 15.多态中的成员的成员方法
- 编译看父类,运行看子类
- 静态方法 编译运行都看父类
- 16.当做参数的时候用多态最好,因为扩展性强
-
method(new Dog()); method(new Cat()); public static void method(Animal a){ c.eat(); }
- 关键字 instanseof 判断前边的引用是否是后边的数据类型
-
if(a instanceof Cat){ Cat c = (Cat)a; c.eat(); c.catchMouse(); }
- 17.抽象类中的子类要么是抽象类,要么重写抽象类中的所有方法
- 18.abstract
- abstract不能修饰成员变量。有构造方法。
- abstract和static 不能共存。static可以用类名调用,但调用抽象方法没有意义。
- abstract和final abstract强制子类重写,但final不让子类重写
- abstract和private。private不让子类访问
- 19.接口
- 接口中的方法都是抽象的,不能定义非抽象的(public abstract)
- 接口不能被实例化
- 成员变量只能是常量(默认修饰符:public abstract 位置可以相互交换)
- 没有构造方法
- 类可以同时实现多个接口--class Demo implements InterA,InterB{...}
- 接口与接口是继承关系,可以单继承,也可以多继承
-
interface Inter { public abstract void print(); } class Demo implements Inter{ public void print(){ System.out.println("print!"); } }
- 20.如何编译运行带包的类
- a:javac编译的时候带上-d即可
- javac -d . HelloWorld.java
- b:通过java命令执行。
- java 包名.HellWord
- a:javac编译的时候带上-d即可
- 21.在开发中用的都是导入具体的类
- 22.package---import----class
-
23.四种权限修饰符
本类 同一个包下(子类和无关类) 不同包下(子类) 不同包下(无关类) private Y 默认 Y Y protected Y Y Y public Y Y Y Y
-
24.内部类
-
main 创建内部类对象 Outer.Inner oi = new Outer().new Inner(); class Outer{ private int num = 10; class Inter{ public void method(){ System.out.println("hello"); System.out.println(Outer.this.num);//10他能获得外部类名 } } }
- 成员内部类被静态修饰后的访问方式是:
- 外部类名.内部类名 对象名 = 外部类名.内部类对象;
- 成员内部类被静态修饰后的访问方式是:
- 25.局部内部类只能在其所在的方法中访问
- 局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?
- 因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用。但是jdk1.8取消了这个事情,所以我认为这是个bug