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
  • 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
posted @ 2018-08-29 21:41  菜白小系瓦  阅读(104)  评论(0编辑  收藏  举报