基本概念总结:
1.面向对象和面向过程的区别:
面向过程:关注的是功能行为(问题解决,步骤)
面向对象:面向对象时面向过程的升级,将功能行为进行进一步的抽象,关注是具备了某种功能的角色,面向过程让程序员从执行者升级为指挥者。
2.类和对象
类:对一类事物的描述(抽象的,概念上的)或者说是对现实世界事物的抽象定义,也是我们创建对象的模板。
对象:实例(具体的个体)
类:具有属性和方法
特征:一类事物的共性,在类中用属性来描述。
行为:一类事物所具有的行为,在类中用方法来描述。
类中的属性由成员变量来描述。这些属性可以称之为对象属性(实例变量)
成员变量没有显示赋值时,默认为0,不同的类型解析为不同的解释。如:Boolean型为false, String型为null。
判断有无新对象产生在于new。
重要:对象只能用引用类型的变量接收,并且该引用变量保存的是对象的内存地址,不是对象的本体
垃圾对象:没有引用指向它。
对象之间互相独立互不干扰。只要new,就创建一个新的对象。
new出来的东西都保存在堆中。
例子:(创建对象的语法: 类名 对象的引用名 = new 类名();
)
注:操作对象,其实是在操作对象的引用
引用间的赋值,是将引用中保存的地址copy给另一个引用(和变量间的赋值一样)
/**
写一个学生类Student
特征和行为都是抽象(抽出来像的东西)出来的,(将学生类中共有的特性描述出来)
特征,行为具有概括性
特征:姓名,学号,专业(profession)
行为:吃饭,学习,say()作自我介绍
*/
public class Student {
//特征,用成员变量来描述
String name; //对象属性(实例变量)
int num; //对象属性(实例变量)
String profession; //对象属性(实例变量)
//行为,用成员方法来描述
//吃饭
public void eat() {
System.out.println("吃饭!");
}
//学习
public void study() {
System.out.println("学习!");
}
//say()作自我介绍
public String say() {
return "姓名:" + name + "\t学号:" + num + "\t专业:" + profession;
}
}
/**
测试类StudentTest,创建一个Student对象,给对象的属性赋值,
调用对象的方法,打印输出对象的自我介绍
*/
public class StudentTest {
public static void main(String[] args) {
/*
对象的创建:对象只能保存在引用变量中
类名 对象的引用名 = new 类名(); (也可以叫做对象,但是要时刻知道它只是对象的一个引用,保存着对象的地址,不是对象本体)
创建对象的步骤:
1)在内存中开辟一块类型为Student,名字为s的引用变量区域
2)依据类模板创建一个对象
3)将对象的地址赋值给s
*/
Student s = new Student();
//给对象的属性进行赋值(不是初始化赋值)
s.name = "沈yl";
s.num = 102;
s.profession = "计算机";
//调用对象的方法
s.eat();
s.study();
System.out.println(s.say() + "这是s");
System.out.println("----------------------------------------------");
//把s中保存的地址赋值给引用变量s1
//(赋值操作,(将s中保存的地址copy,然后写入了s1),
//s若发生改变,s1中的地址不会改变(copy过去的))
Student s1 = s;
System.out.println(s1.say() + "这是s1");
System.out.println("将s引用指向新的对象看s1是否发生改变");
s = new Student();
System.out.println(s.say() + "这是s");
System.out.println("----------------------------------------------");
System.out.println(s1.say() + "这是s1");
//依据类模板创建的一个全新的对象,和上边不是一回事
//Student s1 = new Student();
//System.out.println(s1.say());
}
}
3.封装
使用private将属性进行封装,提高安全性。这样只有本类中的方法可以调用,其他类不能访问。
在类中声明set/get方法为外界提供一个公共方法。并且可以利用get/set方法做一些合理性的检查。
变量访问原则:就近原则。
this——->对象
代表
将上边的例子中的属性进行封装:
set/get方法默认规范,建议写成如下述代码所示.
**公共方法调用:
引用名.方法名(); 若有参数,括号中写成参数 (实参和形参赋值要求兼容就可以,不一定要类型完全一样)**
public class Student1 {
//特征,用成员变量来描述//利用private将name num 封装起来
private String name; //对象属性(实例变量)
private int num; //对象属性(实例变量)
private String profession; //对象属性(实例变量)
//name的set/get方法
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
//num的set/get方法
public void setNum(int num) {
this.num = num;
}
public int getNum() {
return num;
}
//profession的set/get方法
public void setProfession(String profession) {
this.profession = profession;
}
public String getProfession() {
return profession;
}
//行为,用成员方法来描述
//吃饭
public void eat() {
System.out.println("吃饭!");
}
//学习
public void study() {
System.out.println("学习!");
}
//say()作自我介绍
public String say() {
return "姓名:" + name + "\t学号:" + num + "\t专业:" + profession;
}
}
public class StudentTest1 {
public static void main(String[] args) {
Student1 ss1 = new Student1();
ss1.setName("沈yl");
ss1.setNum(102);
ss1.setProfession("计算机");
System.out.println(ss1.getName());
System.out.println(ss1.getNum());
System.out.println(ss1.getProfession());
System.out.println(ss1.say());
System.out.println("-------------------------------------------------");
Student1 ss2 = new Student1();
ss2.setName("温z");
ss2.setNum(103);
ss2.setProfession("化学");
System.out.println(ss2.getName());
System.out.println(ss2.getNum());
System.out.println(ss2.getProfession());
System.out.println(ss2.say());
}
}