JAVA零基础学习笔记08

一、对象类型转换
1、基本数据类型转换:
在笔记02也提及基本数据类型转换
在这里插入图片描述
2、java对象的类型转换
在这里插入图片描述
创建
父类Person
子类Student
在这里插入图片描述
[外链图片转存失败,源站可能有防盗在这里插入!链机制,建描述]议将图片上https://传(imblog.csdm-.cn/202aIQp10220202440377.ng)(https://im问题g-blog.csdnimg.cn/20210220202440377.png)]
在这里插入图片描述
举例(如下一图):
留个问题:为什么这里的 s 被当成类来用了?
在这里插入图片描述
使用图来表示:

在这里插入图片描述
创建父类 Person ;子类 Student ;
此时在Test类中:
如果匿名对象是父类 Person,就输出 Person 中的方法;
如果匿名对象是子类 Student,就输出 Student中的方法。
为什么method使用的是 Person e 形参?
因为 Student 是子类,可以当作特殊的父类填入。
在这里插入图片描述

二、== 与 equals_1
1、==
在这里插入图片描述
图中 p1 ≠ p2,因为不是指向同一个对象。
数据类型必须兼容体现在:
没有继承关系,即非父子类的两个对象使用 == 时会报错。

2、equals
在这里插入图片描述
在这里插入图片描述
小结:
对于对象来说,特殊的类:如String、File、Date,
使用 == 时比较的是对象(对象的地址)
equals 比较的是内容
除了特殊的类之外的普通类,== 和 equals 比较的都是对象(的地址)。
如果你想改变某一个类的equals,不想用 equals 来比较对象的地址,就需要重写equals方法。

3、String对象的创建
回答了上方数据转换的疑问。
大部分新建字符串,都是使用第一种方式,省内存。
在这里插入图片描述

二、== 与 equals_2

1、判断下图输出结果:
在这里插入图片描述2、改写equals函数
(1):在类中 alt + /,选择改写equals函数;
(2):判断传入的对象是否是Object类的(使用 instanceof);
(3):如果是,建立一个变量转换成正确的变量(强制类型转换)
(4):改写需要的内容。
在这里插入图片描述

三、包装类和 toString

1、包装类:
在这里插入图片描述
在这里插入图片描述
手动:i为拆箱,b为装箱:
在这里插入图片描述
自动拆箱、装箱:
在这里插入图片描述
2、字符串与其他数据类型的转换
(包装类的主要应用)
在这里插入图片描述
(1):字符串转换为基本数据类型:
第二种方法:
在这里插入图片描述
(2):基本数据类型转换为字符串:
在这里插入图片描述
包装类的用途:
主要用于字符串与基本数据类型的转换

(所以多留意上方 6 行范例代码)

3、toString 方法
父类的 toString 方法为输出当前对象的内存地址;
如果要输出其他信息,要重写 toString 方法。加粗样式(感觉不如直接新建一个方法。。)
而且打印对象,相当于执行打印 对象名.toString
在这里插入图片描述

四、关键字 static

1、类属性
设想如下情况:建立一个中国人的类,建立多个对象,但对象的国籍都是相同的,为避免多次定义内容相同的属性,可以使用 static 关键字。
步骤如下:
(1):在类中定义变量
用 static 关键字修饰的为类变量,不用实例化,直接 类名.属性名 使用,是类的一部分,被所有类的实例化对象共享。也可以叫静态变量。
//实例变量,只有实例化后才能使用,属于实例化对象的一部分
在这里插入图片描述
(2):在main方法中测试
在这里插入图片描述

2、类属性、类方法的设计思想
在这里插入图片描述
类方法,即静态方法用的比较多,工具类
如创建一个判断字符串是否为空字符串的工具类:
(1):新建类 Utils;
(2):在main方法中调用该工具方法。通过类别 . 方法名调用
具体如下二图:
在这里插入图片描述
在这里插入图片描述
练习:打印new某个类的次数
在该类中新建类属性count,构造方法count++;
具体如下二图:
在这里插入图片描述
在这里插入图片描述
运行结果为 2

注意
(1):类变量由于其被所有实例化对象共享使用的特性,使用时需要慎重,因为改动一次,所有类都会感受到变化。
(2):因为不需要实例化就能调用 static 方法,所以 static 方法内部不能有 this 、super 。
(3):重载的方法需要为同时为 static 或非 static 的。

五、单例(Singleton)设计模式

在这里插入图片描述
使用情况:
(1):new对象耗时长
(2):频繁的new新的对象,没有必要

1:饿汉式

过程有三步,如下一图:
在这里插入图片描述
然后在main方法中,不能通过new来实例化,只能使用如下方式。这这里s ~ s4都是指向实例化好的single,所以总共只实例化了一次:
在这里插入图片描述
2:懒汉式
最开始,对象是null,直到有第一个人调用我,才new一个对象,之后所有调用我的都用这个对象。
过程如下一图:
在这里插入图片描述
区别(new对象的时机):
饿汉式:在类加载之后还没人调用,已经new好一个对象,之后无论谁来调用getInstance方法,都直接返回之前new好的那个对象。
懒汉式:在第一次有人调用getInstance方法时开始new对象,之后有人调用getInstance方法时直接返回之前第一次new好的对象。
懒汉式存在线程安全问题,后面会提。

六、再谈main方法
在这里插入图片描述
(1):创建TestMain.java文件,使用记事本打开,写如下内容:
在这里插入图片描述
(2):打开DOS命令窗口,运行此文件。
abc,123,lkj,sss就是输入main方法的参数。
在这里插入图片描述
(暂时不知道讲这个有什么用)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值