1、对象与类
1.1 对象的定义
面向过程:面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求
面向对象:这些步骤和功能再进行封装,封装时根据不同的功能,进行不同的封装,功能类似的用一个类封装在一起,这样结构就清晰了很多。用的时候,找到对应的类就可以了
面向过程:强调的是每一个功能的步骤
面向对象:强调的是对象,然后由对象去调用功能
举例:炖排骨汤
面向过程:洗排骨-焯水-放入锅中大火烧开后转小火-加入调料-小火炖
面向对象:洗排骨-放入炖汤机器中-喝汤
1.2 类
类如何和事物进行对应的呢?
1、类:
成员变量:对应事物的属性
成员方法:对应事物的方法
2、成员变量与普通变量的区别:
位置不同:成员变量在类中、方法外
初始值:成员变量无需给初始值,它有默认值
3、成员方法和普通方法的区别:
没有关键词static
4、举例:学生类
public class Student {
//成员变量
//姓名
String name;
//年龄
int age;
//成员方法
//学习的方法
public void study() {
System.out.println("好好学习,天天向上");
}
//吃饭的方法
public void eat() {
System.out.println("学习饿了要吃饭");
}
}
1.3 对象和类的关系
我们如何描述现实世界事物:
1、属性:该事物的描述信息(事物身上的名词)
2、方法:该事物能够做什么(事物身上的动词)
类与对象:
类:一组相关的属性和行为的集合
对象:该类事物的具体体现
如类:学生,对象:张三;类:车,对象:奔驰
创建对象:
类名 对象名 = new 类名();
public class Student {
...
}
Student s = new Student();
2、对象的内存图
2.1 一个对象的内存图
2.2 两个对象的内存图(共用一个方法区)
2.3 两个对象的内存图(指向同一个堆内存)
2.4 成员变量和局部变量的区别
成员变量和局部变量的区别:
A:在类中的位置不同
成员变量:在类中,方法外
局部变量:在方法中或者方法声明上(形式参数)
B:在内存中的位置不同
成员变量:在堆内存
局部变量:在栈内存
C:生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
D:初始化值不同
成员变量:有默认值
局部变量:没有默认值,必须先定义,赋值,最后使用
public class test {
int x; //x为成员变量
public void show() {
int y = 1; //y为局部变量
System.out.println(y);
System.out.println(x);
}
}
3、 private、this关键字和封装
3.1 private
public class Student {
String name;
int age;
}
Student s = new Student()
s.age = -20;
1、why
直接使用对象名访问成员变量,会存在数据的安全问题
如age不可能小于0,不对成员变量做限制就会存在这种问题
2、how
使用private
private
3、what
private:
1、是一个修饰符
2、可以修饰成员变量,也可以修饰成员方法
3、被private修饰的成员只能在本类中被访问
针对被private修饰的成员变量,我们会相应的给出getXxx()和setXxx()用于获取和设置成员变量的值
public class Student {
private String name;
public void setName(String n){
name = n;
}
public void getName() {
return name;
}
private int age;
public void setAge (int a) {
if(a<0 || a>200) {
System.out.println("你给的年龄有误");
}else {
age = a;}
public int getAge() {
return age;
}
3.2 封装
1、what
把成员变量隐藏在对象内部的,外界无法直接操作和修改
2、好处
通过方法来控制成员变量的操作,提高了代码的安全性
把代码用方法来封装,提供了代码的复用性
3、原则
将不需要对外提供的内容都隐藏起来。
把属性隐藏,提供公共方法对其访问。
成员变量private,提供对应的getXxx()/setXxx()方法
3.3 this关键词
1、使用场景
局部变量和成员变量同名时
public void setName(String name) { //"林青霞"
//name = name; 如果局部变量名称和成员变量名称一致,在方法中使用的时候采用的是就近原则。因此这俩都是默认值null
this.name = name;
}
public String getName() {
return name;
//return this.name;
}
public void setAge(int age) {
this.age = age;
}
4、对象的构造方法
4.1 构造方法的作用
用于给对象的数据进行初始化,减少代码量
4.2 格式
–方法名与类名相同
–没有返回值类型,连void都没有
–没有具体的返回值
public class Student {
public Student() {
System.out.println("这是构造方法");
}
}
4.3 如何调用构造方法
格式:类名 对象名 = new 构造方法(...);
Student s = new Student();
4.4 构造方法的注意事项
1、如果你不提供构造方法,系统会给出默认构造方法
2、如果你提供了构造方法,系统将不再提供,这个时候,我们如果还想使用无参数构造方法,就必须自己提供。推荐自己给出无参数构造方法
3、构造方法也是可以重载的,重载条件和普通方法相同