美文网首页软件测试学习之路
Java学习笔记 10 - 构造方法、修饰符、内部类等

Java学习笔记 10 - 构造方法、修饰符、内部类等

作者: 乘风破浪的姐姐 | 来源:发表于2018-07-09 16:41 被阅读7次

    本文主要内容
    1、构造方法
    2、this、super 、final 、static关键字
    3、匿名对象、内部类、包、权限修饰符、代码块

    01 构造方法

    A、作用:在实例化对象同时对象属性初始化
    B、格式:权限 类名(参数列表){}
    C、注意事项
    1、类中,如果没有构造函数,编译器会自动添加一个无参的构造函数。如果有,则不会自动添加。
    2、new 对象时,即是在调用对象的构造方法。
    3、同一个类可以有多个构造方法,构造方法以重载的形式展现
    4、构造方法在创建对象的时候就执行了,而且只执行一次。一般方法是在对象创建后,需要使用时才被调用,可以被调用多次
    5、构造方法没有返回值类型。也不需要写返回值。因为它是为构建对象的,对象创建完,方法就执行结束

    02 this关键字

    构造方法之间的调用,要使用this(参数),语法:this(参数列表)
    1、this(参数)在一个构造方法中调用其他构造方法
    2、this(参数)必须写在构造方法中的第一行
    3、this关键字用来区别同名的成员变量与局部变量,用法:this.成员变量

    03 super关键字

    A、格式
    调用本类中的构造方法:this(实参列表);
    调用父类中的空参数构造方法:super();
    调用父类中的有参数构造方法:super(实参列表);
    B、注意事项
    1、super()调用的是父类的空参数构造方法,进行父类成员的初始化
    super(参数)调用的是父类的有参数构造方法,super.成员变量 调用的是父类的成员变量
    2 、子类的构造方法中有一个默认的构造方法,在该构造方法中的第一行有一个隐式代码super();
    目的是调用父类的构造方法,super代表父类在内存中存储的位置
    3、子类中所有的构造方法,无论重载多少个,第一行必须是super()
    4、如果父类有多个构造方法,子类中super()可以是父类任意一个构造方法。
    5、构造方法不能继承,所以不能重写
    6、super()必须是子类构造方法中的第一行
    7、无论如何,子类的所有构造方法都要直接或间接的调用到父类的构造方法
    8、this()、super()不能同时存在

    子类中的构造方法为什么会有一句隐式的super()呢?
    原因:子类会继承父类中的内容,所以子类在初始化时,必须先到父类中去执行父类的初始化动作。这样,才可以使用父类中的内容。当父类中没有空参数构造方法时,子类的构造方法必须有显示的super语句,指定要访问的父类有参数构造方法。

    04 final 关键字

    final修饰类不可以被继承,但是可以继承其他类
    final class 子类类名 extends 父类类名{}
    final修饰的方法不可以被覆盖,但父类中没有被final修饰方法,子类覆盖后可以加final
    public final void 方法名(){}
    final修饰的变量称为常量,这些变量只能赋值一次,需要在创建对象前赋值,否则报错
    final int i = 20;
    i = 30; //赋值报错,final修饰的变量只能赋值一次

    05 static关键字

    访问静态成员的格式
    类名.静态成员变量名
    类名.静态成员方法名(参数)
    1、静态方法中不能调用非静态方法或变量,只能调用静态方法或变量
    2、静态方法中不能使用this或super
    3、非静态方法可以使用静态变量
    4、当方法中没有使用非静态变量时,方法应该定义为静态方法。
    当方法中只使用非静态变量时,方法应定义为非静态方法。
    当方法中既没有使用静态和非静态变量时,方法应定义为静态方法。
    5、静态方法或变量是在类创建过程中进行创建和初始化的,它的存在优先于非静态方法或变量。当类执行完成后,静态方法或变量才消亡。
    6、接口中的每个成员变量都默认使用public static final修饰。
    7、被static修饰的成员变量属于类,不属于这个类的某个对象
    8、被static修饰的成员可以通过类名直接访问

    06 匿名对象

    1、匿名对象使用格式: new 类名()
    2、匿名对象只能使用一次
    3、匿名对象可以作为方法中的参数,也可以作为返回值

    07 内部类

    A、特点
    1、调用方法中的内部类的方法,需要在方法中new内部类,然后调用内部类的方法。
    2、匿名内部类方法的调用格式:new 内部类名称(){定义具体方法}.方法名;
    3、接口的实现或类的继承,都可以通过 new 接口名或类名(){方法的重写};的方式创建对象。

    B、内部类的分类
    1、成员内部类
    定义在外部类中的成员位置。与类中的成员变量相似,可通过外部类对象进行访问
    定义格式
    class 外部类 {
    修饰符 class 内部类 {
    //其他代码
    }
    }
    访问方式: 外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
    2、局部内部类
    定义在外部类方法中的局部位置。与访问方法中的局部变量相似,可通过调用方法进行访问.
    定义格式
    class 外部类 {
    修饰符 返回值类型 方法名(参数) {
    class 内部类 {
    //其他代码
    }
    }
    }
    访问方式:在外部类方法中,创建内部类对象,进行访问

    3、外部类、内部类、内部类方法中同时定义同一个变量时,内部类使用该变量时遵循就近原则。
    内部类中的方法想要调用内部类中定义的变量,可以用: this.变量名称
    内部类中的方法想要调用外部类中定义的变量,可以用: 外部类名.this.变量名称
    4、内部类的定义位置可以在外部类定义变量的任意相同位置

    08 包

    类中包的声明格式: package 包名.包名.包名…;
    在访问类时,为了能够找到该类,必须使用含有包名的类全名:包名.包名….类名,如: java.util.Scanner
    导包的格式:import 包名.类名;

    09 权限修饰符

    public 所有包中的类都可以访问
    protected 本包及子类可以访问,不同包的子类访问,只能在子类中访问,不能出类例如:在main方法中实例化子类对象通过实例化的对象去访问protected修饰的方法或变量,是不可以的。
    default 本包内都可以访问,不同包的子类不能访问。
    private 只能本类可以访问

    10 代码块

    A、以”{}”划定的代码区域 叫代码块,位置没有固定要求,可随意
    B、分类: 局部代码块 构造代码块 静态代码块 同步代码块
    1、局部代码块
    以”{}”划定的代码区域,此时只需要关注作用域的不同即可
    方法和类都是以代码块的方式划定边界的

    2、构造代码块
    构造代码块是定义在类中成员位置的代码块
    优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作
    每创建一个对象均会执行一次构造代码块

    3、静态代码块
    定义在成员位置,使用static修饰的代码块。
    静态代码块只执行一次,无论new几次对象。非静态代码块、构造方法,new几次对象就执行几次
    静态代码块优先于非静态代码块执行,非静态代码块优先于构造方法执行
    可用于给静态变量赋值,用来给类进行初始化。

    相关文章

      网友评论

        本文标题:Java学习笔记 10 - 构造方法、修饰符、内部类等

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