美文网首页
Java基础随记2

Java基础随记2

作者: YuHChen | 来源:发表于2017-01-21 17:56 被阅读0次

    Java 基础随记


    - Java中的this

    this是指当前对象自己。在写一个方法的时候,如果想在方法内部获得对当前对象的引用就可以用this。this表示对“调用方法的那个对象”的引用。也就是说this指的是方法所属的类的对象的引用。

    • 调用当前对象中的成员变量或方法:this.当前对象中的成员变量或方法
    • 调用当前对象的构造方法:this(参数)

    - 内部类

    • 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类;

    • 内部类的方法可以直接访问外部类的所有数据,包括私有的数据。

    • 例子:

        //外部类HelloWorld
        public class HelloWorld {
      
         // 内部类Inner,类Inner在类HelloWorld的内部
        public class Inner {
        
            // 内部类的方法
            public void show() {
                System.out.println("welcome to imooc!");
            }
        }
      
        public static void main(String[] args) {
        
            // 创建外部类对象
            HelloWorld hello = new HelloWorld();
            // 创建内部类对象
            Inner i = hello.new Inner();
            // 调用内部类对象的方法
            i.show();
        }
      
        }
      

    - Java 中的静态内部类

    静态内部类是 static 修饰的内部类,这种内部类的特点是:

    1. 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问

    2. 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

    3. 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

    • 代码:

        //外部类
        public class HelloWorld {
      
        // 外部类中的静态变量score
        private static int score = 84;
        private  int scoree = 23;
        // 创建静态内部类
        public static  class SInner {
            // 内部类中的变量score
            int score = 91;
        
            public void show() {
                // 只能访问score,不能访问scoree
                System.out.println("访问外部类中的score:" + HelloWorld.score );
                System.out.println("访问内部类中的score:" + score);
            }
        }
      
        // 测试静态内部类
        public static void main(String[] args) {
            // 直接创建内部类的对象
            SInner si = new SInner();
            // 调用show方法
            si.show();
        }
      
        }
      

    继承

    • 父类的private方法是无法被子类访问或覆盖的
    • 创建一个子类对象时,程序内部执行顺序为:
      • 父类属性初始化
      • 父类构造方法(super();
      • 子类属性初始化
      • 子类构造方法
    • super
    • 子类的构造过程必须调用父类的构造方法
    • 子类的构造方法中如果没有显示调用父类构造方法,则默认调用无参构造
    • 显示调用父类构造方法必须在第一行
    • 如果没有显示调用,而父类又没有无参构造方法,编译时则报错

    Java中的final和static

    - final

    • 声明 final 字段有助于优化器作出更好的优化决定,因为如果编译器知道字段的值不会更改,那么它能安全地在寄存器中高速缓存该值。
    • final 字段还通过让编译器强制该字段为只读来提供额外的安全级别。
    • final可以修饰变量、方法及类;
    • 当定义一个final变量时,jvm会将其分配到常量池中,程序不可改变其值,相当于一个常量,初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中,不能不赋值;
    • 当修饰一个方法时,该方法在子类中将不能被重写;
    • 当修饰一个类时,该类不能被继承。

    - static

    • 静态成员或类成员:它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。

    • 静态方法或类方法:

    • 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。


    • 如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。


    • 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。


    • Java 中的 static 使用之静态初始化块

      • 例子:
      • 结果:
      • 结论:
        1. 程序运行时,静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法
        2. 静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。

    - instanceof语句

    • A instanceof B
    • 用于判断对象A是不是B类型,进而判断是否可以装化。

    - 抽象类abstract

    • 应用场景:
    • 在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法
    • 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类做为子类的模板,从而避免子类设计的随意性
    • 作用:限制规定子类必须实现某些方法,但不关注实现细节
    • 使用规则:
    1. abstract定义抽象类
    2. abstract定义抽象方法,只有声明,不需要实现
    3. 包含抽象方法的类是抽象类
    4. 抽象类中可以包含普通的方法,也可以没有抽象方法
    5. 抽象类不能直接创建,可以定义引用变量抽象方法没有方法体以分号结束
    • 代码例子:
    • 父类:


    • 则子类为:(自动添加父类中的方法)


    • 由例子可知可用于写模板

    相关文章

      网友评论

          本文标题:Java基础随记2

          本文链接:https://www.haomeiwen.com/subject/jagibttx.html