近来有对类与对象进行了更深入的学习,补充完善一下之前的博客。
一、认识对象
所谓对象,是对客观事物的抽象,这似乎并不好理解,那么就通过实例来理解一下。
那么请问生活中的对象有哪些?第一次,我的回答是:鼠标、电脑、人......
然而,我的回答并不正确,因为我所答的并不能准确指定生活中的某一客观事物,所以,如果把答案改为:我的鼠标,我的电脑、我......答案无错。
二、描述对象
描述对象,需要描述两个方面:特征、行为。
相信这很好理解。
一人的特征:身高、体重、外貌、名字、性别......
一个人的行为:学习、运动、吃饭、刷牙......
Java中关于对象的代码:
1、实例化对象
类名 对象名 =new 类名();
例如:
Student stu=new Student();
2、调用属性和方法
对象名.属性名;
对象名.方法名();
例如:
stu.name;
stu.sthdy();
三、认识类
所谓类,是对对象的抽象,对象是类的实例,类是对象的模板。
之前我的回答:鼠标、电脑、人......便是类了。
而电脑的特征中:Cpu型号,耗电量,显示器型号......这些有可以各成一类。所以类也可以是特征中的一部分。
四、划分类
类似于描述对象,划分类需要根据对象的相似的特征和相似的行为(方法)进行归类。
方法分为两类:1.构造方法(构造器、构造函数) 2.普通方法
Java中关于类的代码:
1、定义类
public class 类名{
//属性的格式
访问修饰符 数据类型 属性名;
//方法的格式
访问修饰符 返回值类型 方法名(数据类型 参数名, ....)
{
//方法的代码
}
访问修饰符 构造方法名(数据类型 参数名,...){
//代码
}
}
注:访问修饰符在我的论文:浅识——java类的继承 中已列表
例如:
public class Student {
// 定义整数类型的学分属性
public int score;
// 定义字符串类型的姓名属性
public String name;
//定义一个学习课程的方法 sub就是要学习的课程对象,Subject是课程类型
public void study(Subject sub){
//减少课程的课时
sub.time--;
System.out.println(name+"正在学习"+sub.name+"课程,剩余的课时是"+sub.time);
//判断sub课程对象的课时是否学完
if(sub.time==0){
score += sub.score;//学生的学分增加课程的学分\
System.out.println(name+"已经学完了"+sub.name+"课程,"+name+"现在的学分是"+score);
}
}
public void study(Car car){
System.out.println(name+"正在学习开"+car.name);
}
public Student(String name){
this.name = name;
}
}
五、补充:构造方法
Java默认会给类提供一个无参数的构造方法。
即:public Student(){ }
但当一个类中出现了其他的带参构造方法,则java便不会提供无参数的构造方法了。实例化对象是也不能使用无参构造方法。
可以在子类中定义父类中没有的构造方法。
构造方法的用途:1.实例化对象(就像你的名字是出生前取的)
2.传递参数
六、补充:this关键字
当你的参数名和属性名相同时,可以使用this关键字来做区分,加上this的表示属性名,没有加的则表示参数名。
七、方法重载
理解:方法名相同,但是处理的对象,方法不同时需要重载。
1.现实生活中什么情况下需要使用方法重载?
普通方法:学生——>学习:1课程2开车、...
构造方法:贾宝玉出生的时候_带通灵宝玉
林黛玉出生的时候_不带通灵宝玉
2.方法重载的实现:
1.方法名必须要相同
2.方法的参数不同(个数、类型、顺序)
八、对象和基本类型的内存分配
理解:对单个数值java采取栈存储,对类、串等二元以上数据的存储,是利用指针和地址的堆存储。
所以,若:
String str = "abc";
String str2 = "abc";
str=str2;
则:对str、str2中任一串的修改同时对两个串生效。
这里 ,若a=b=5,则java会使a和b共享内存而节省空间,指导其中一值出现变化才会另分配储存空间。