day06对象

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 一个对象的内存图

day06对象

2.2 两个对象的内存图(共用一个方法区)

day06对象

2.3 两个对象的内存图(指向同一个堆内存)

day06对象

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、构造方法也是可以重载的,重载条件和普通方法相同

上一篇:day06


下一篇:day06