Java基础学习day12【谷】

Java基础学习day12

多态性(继续理解)

有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致无法调用子类特有的方法。
编译时,只能调用父类中声明的属性和方法。子类特有的属性和方法不能调用。
如何才能调用子类特有的属性和方法?
向下转型:使用强制类型转换符。

向上转型:多态

使用强转时,可能出现classCastException的异常

避免异常的出现:instanceof

instanceof关键字的使用
a instanceof A:判断对象a是否是类A的实例。如果是,返回true;如果不是,返回false。
使用情境:为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instanceof的判断,一旦返回true,就进行向下转型。如果返回false,不进行向下转型。
如果a instanceof A返回true,则a instanceof B也返回true。其中,类B是类A的父类。

Object类的使用

java.lang. object类
1.Object类是所有Java类的根父类
2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java,lang.Object类
3.object类中的功能(属性、方法)就具有通用性。
属性:无
equals()/tostring()/getclass()/hashCode()/clone()/finalize()
wait()、notify()、notifyAll()
4.object类只声明了一个空参的构造器

面试题

==与equals()区别

==:运算符

1.可以使用在基本数据类型变量和引用数据类型变量中
2.如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等。(不一定类型要相同)
如果比较的是引用数据类型变量:比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体

equals()方法的使用:

1.只是一个方法,而非运算符

2.只能适用于引用数据类型

3.Object类中equals()定于与==一样都是比较地址值

4.像String、Date、File、包装类等都重写了object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同

而是比较两个对象的“实体内容“是否相同。(即属性值)


equals()在我们自定义的类中也想要他比较内容是否相等,我们可以自己重写equals()方法,也可以自动生成(大多数情况)


toString方法

  1. 当我们输出一个对象的引用时,实际上就是调用对象的toString()
  2. 像String、Date、File、包装类等都重写了object类中的toString()方法。重写以后,使得在调用对象的toString()时,返回“实体内容”信息
  3. 自定义类也可以重写toString()方法,当调用此方法时,返回对象的“实体内容”

Java中的JUnit单元测试

步骤:
1.选中当前工程-右键选择:build path-add libraries-JUnit4-下一步
2.创建Java类,进行单元测试。
此时的Java类要求:@此类是public的②此类提供公共的无参的构造器
3,此类中声明单元测试方法。
此时的单元测试方法:方法的权限是public,没有返回值,没有形参
4.此单元测试方法上需要声明注解:@Test,并在单元测试类中导入:import org.junit.Test;
5.声明好单元测试方法以后,就可以在方法体内测试相关的代码。
6.写完代码以后,左键双击单元测试方法名,右键:run as-JUnit Test
说明:
1.如果执行结果没有任何异常:绿条
2.如果执行结果出现异常:红条

包装类的使用

在这里插入图片描述

包装类是类默认值为null

基本数据类型—>包装类:调用包装类的构造器

包装类—>基本数据类型:调用包装类Xxx的XxxValue()

自动装箱与自动拆箱

自动装箱:基本数据类型—》包装类

int num2 = 10;
Integer in1 = num2;
boolean b1 = true;
Boolean b2 = b1;

自动拆箱:包装类----》基本数据类型

int num2 = in1;

包装类和基本数据类型转换为String类型

方法一:使用连接运算 如 + “”

String b=az+"";
System.out.println(b);

方法二:使用String.valueof()方法

Integer az=2;
String a=String.valueOf(az);
System.out.println(a);

String类转化为基本数据类型或包装类使用,包装类.parseXxx()

String s="123";
Integer num=Integer.parseInt(s);
System.out.println(num+1);

三位运算符结果统一

面试题

在这里插入图片描述

Integer内部自定义了IntegerCache结构,定义了数组,保存了-128到127范围的整数,在此范围为内自动装箱不需要去new一个新的空间,直接调用即可

练习

利用Vector代替数组处理:从键盘读入学生成绩(以负数代表输入结束),找出最高分,并输出学生成绩等级。

提示:数组一旦创建,长度就固定不变,所以在创建数组前就需要知道它的长度。而向量类java.util.Vector可以根据需要动态伸缩。
创建Vector对象:Vector v=new Vector();
给向量添加元素:v.addElement((Object obj) //obj必须是对象
取出向量中的元素:Object obj=-v.elementAt(0):
√注意第一个元素的下标是0,返回值是Object类型的。
计算向量的长度:v.size():
若与最高分相差10分内:A等;20分内:B等;30分内:C等;其它:D等

public class demo {
    public static void main(String[] args) {
        Double max=0.0;
        Vector<Object> vector = new Vector<>();
        while (true){
            System.out.println("请输入学生成绩(-1退出):");
            Scanner scanner = new Scanner(System.in);
            Double goal = scanner.nextDouble();
            if(goal<0){
                break;
            }
            if (goal>100){
                System.out.println("成绩异常!!!,请重新输入...");
                continue;
            }
            vector.addElement(goal);
            System.out.println("添加成功!!!");
            if(max<goal){
                max=goal;
            }
        }
        System.out.println("最大成绩为:"+max);
        for (int j = 0; j < vector.size(); j++) {
            double flag =max-(double)vector.elementAt(j);
            if(flag<10){
                System.out.println("A");
            }else if (flag<20){
                System.out.println("B");
            }else if(flag<30){
                System.out.println("C");
            }else {
                System.out.println("D");
            }

        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值