Day17测试及知识整理

构造方法

构造方法无返回类型值[无void],且名称必须与类名相同

this()

调用自己的[本类]无参数构造函数;
实现构造方法的复用

this(int m):调用自己的[本类]有一个参数的构造函数
以此类推…

一般放在构造函数首行
不能同一个构造器中出现两个this()
this需要放构造函数首行

存在编译错误
public M(int m,int n){
this();
this(3);}

class M{
    //无参构造
//    public M(){
//        this();
      //this();调用自身无参数构造,不能放入无参构造函数中调用
//    }
    public M(){

    }

    public M(int m){
        this(); //必须要有对应的构造函数存在,才能调用
    }

    public M(int m,int n){
//        this();  //编译错误不同同时出现两个
        this(3);
    }
}

super()

子类构造前需要先构造父类

子类构造方法中,首行必须是super(),即调用父类无参数构造方法,也可调父类有参构造方法

子类构造方法没写super()时,系统默认调用父类无参构造,这时必须保证父类有无参构造方法

必须写在构造方法首行

class N extends M{
    public N(){
        //未写super(),系统默认调用父类无参构造
    }
    public N(int n){
        super(5);//子类构造前需要先构造父类
//        this(); //编译错误 super()与this()不能同时出现在一个构造器中
    }
      public N(int a,int b){
      //没有写super(),系统默认调用父类无参构造
        this(a);
    }
}

super()与this()均要放在构造函数的首行,否则不能同时在一个构造函数中使用

重载

只有方法名相同,形参列表不同[形参参数个数不同 或 形参参数数据类型不同],与返回类型值、返回值无关

方法返回值类型、修饰符 可以相同,也可以不同

仅有返回类型值不同,不足以区分两个重载

void sayHi(){ System.out.println(“HHH”); }
int sayHi(){ System.out.println(“HHH”); return 0; }
编译错误,仅有返回类型不同,不足以区分两个重载

//重载: 只有方法名相同,形参列表不同[参数个数不同 参数数据类型不同],与返回值类型无关;
//方法类型、修饰符可以相同,也可以不同
//仅有返回类型不同,不足以区分两个重载
public class Demo1Override {
    void sayHi(){
        System.out.println("HHH");
    }
    //编译错误,仅有返回类型不同,不足以区分两个重载
//    int sayHi(){
//        System.out.println("HHH");
//        return 0;
//    }
    //只有方法名相同,形参列表不同[参数个数不同 参数数据类型不同]
    //只有方法名相同,参数数据类型不同
    void sayHi(int a){
        System.out.println("HHH");
    }
    //编译错误,仅有返回类型不同,不足以区分两个重载
//    int sayHi(int a){
//        System.out.println("HHH");
//        return 0;
//    }
    int sayHi(String a){
        System.out.println("HHH");
        return 0;
    }
    //只有方法名相同,参数个数不同
    int sayHi(String a,String b){
        System.out.println("HHH");
        return 0;
    }
}

new 类 决定对象的数据类型

new 类

类是谁,调用的就是该类中的方法

new 类 决定了对象的数据类型
即使进行强转 本质还是看new的什么类型

A a1=(A)new B();
System.out.println(a1.getClass());//class day6.B
即使强转为A类型 本质对象还是B类,因此调用B类的go()

class A{
    void go(){
        System.out.println("这是父类");
    }
}
class B extends A{
    void go(){
        System.out.println("这是子类");
    }
}

public class Demo2Extends {
    public static void main(String[] args) {
        //new的类是谁,调用的就是该类中的方法
        A a=new A();
        a.go(); //这是父类

        A a1=(A)new B();
        //new 类 决定了对象的数据类型 
        //即使进行强转 本质还是看new的什么类型 是什么类
        System.out.println(a1.getClass());//class day6.B
        // 即使强转为A类型 本质对象还是B类,因此调用B类的go()
        a1.go(); //这是子类

        A a2=new B();
        a2.go();//这是子类

        B b=new B();
        b.go();//这是子类

        //B b1=new A(); 
        //编译错误 父类创建的对象不能赋值给子类引用类型的变量

    }

}

java源文件编译与运行

Java中的编译和运行过程可以分为两个阶段:

第一个阶段是编译阶段, javac命令 将.java源文件编译成.class字节码文件

第二个阶段是运行阶段, java命令 将.class字节码文件加载到内存,并在JVM中进行解释或优化

能被java.exe成功运行的java class文件必须有main()方法

判断以下正误,错在哪

能被java.exe成功运行的java class文件必须有main()方法

Java源码直接运行在JVM中,JVM会对源码进行编译和运行

Java源码编译完生成平台直接可运行的二进制文件

class文件是字节码,字节码是和机器相关的可运行代码

Integer 与 int

Integer 自动装箱的数值范围在 -127至128中

常量值超出范围,则需要开辟新空间来存储

new Integer()均是堆内存中开辟新空间

int类型 与 Integer类型比较 == 或 equal将Integer拆箱, 再比较值
若重写过equal()方法,一般比数值

public class Demo1Learn {
    public static void main(String[] args) {
        Integer a1=17,a2=17;
        Integer b1=2017,b2=2017;
        Integer c1=new Integer(17);
        Integer c2=new Integer(17);
        Integer d1=new Integer(2017);
        Integer d3=new Integer(2017);
        int d2=2017;
        int e1=17;
        System.out.println(a1==a2);//true

        System.out.println(b1==b2);//false
        //常量值超出范围,则需要开辟新空间来存储  则开辟两个新空间
        System.out.println(b1.equals(b2));//true
        // equals()方法 只比数值

        System.out.println(c1==c2);//false
        //new创建了两个空间
        System.out.println(c1.equals(c2));
        // equals()方法 只比数值

        System.out.println(a1==c1);//false
        //两个空间地址 不相等
        System.out.println(a1.equals(c1));//true
        // equals()方法 只比数值

        System.out.println(d1==d3);//false 两个空间位置不想等
        System.out.println(d1.equals(d3));//true

        //int类型 与 Integer类型比较 == 或 equal
        //将Integer拆箱, 再比较值
        System.out.println(d1==d2);//true
        System.out.println(e1==a1);//true
        System.out.println(e1==c1);//true
        System.out.println(d1.equals(d2));//true
        System.out.println(a1.equals(e1));//true
        System.out.println(c1.equals(c1));//true
        //int类型[基本数据类型] 无equals()方法
        //Integer 自动装箱的数值范围在 -127至128中
        //常量值超出范围,则需要开辟新空间来存储
        //new Integer() 均是堆内存中开辟新空间
        //int类型 与 Integer类型比较 == 或 equal将Integer拆箱, 再比较值
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值