Java面向对象——类、封装、this、构造方法

目录

 

阐述

举例说明 面向对象 思想 特点

this关键字的由来及使用

封装的概述和好处

private关键字的由来及使用

成员变量和局部变量的区别

对象的内存图原理

Java中的类和现实中事物的对应关系

课后作业

扫描二维码关注公众号,回复: 12898843 查看本文章

阐述

举例说明 面向对象 思想 特点

面向对象的特点:

更符合我们思考问题的习惯。

对于使用者来说,将复杂问题简单化。

我们从执行者的位置变成了指挥者,只需要调用对象的方法即可。

举例:我想吃煎饼,可以命令大妈(对象)摊煎饼(调用方法),煎饼摊好给我(返回值),我就可以吃了。

this关键字的由来及使用

this代表所在类的对象引用。方法被哪个类调用,this就代表哪个类。

局部变量和成员变量重名的时候,就用this。

封装的概述和好处

封装是 面向对象的三大特征之一(封装、继承、多态),是面向对象编程语言对客观世界的模拟,和客观世界一样把细节(成员变量)隐藏在对象内部,只向外界暴露公共的访问方式。

好处:

通过方法来控制成员变量的操作,提高了代码的安全性。

把代码用方法进行封装,提高了代码的复用性。

private关键字的由来及使用

private可以看成封装的一种体现

private关键字是权限修饰符,修饰的是成员(成员变量、成员方法),被修饰的成员只能在本类中进行访问

使用方法:用private修饰成员,提供对应的set和get方法

成员变量和局部变量的区别

有五点不同

1.在类中的位置不同

成员变量在类中、方法外;局部变量在方法内或方法声明上(形式参数)

2.在内存中的位置不同

成员变量属于对象,在堆内存中;局部变量属于方法,在栈内存中

3.生命周期不同

成员变量随着对象的创建而存在,随着对象的消失而消失;局部变量随着方法的调用而存在,随着方法的弹栈而消失

4.初始化值的问题

成员对象有默认值;局部对象没有默认值,必须先定义、赋值,然后才能使用

5.作用域不同

成员变量的作用域是整个类;局部变量的作用域是其所在的花括号代码块

对象的内存图原理

对象就是类事物的具体体现。

在方法区描述类的内容。

调用方法的时候,方法加载到栈内存,JVM在栈内存为方法开辟一个空间,里面存储方法中的局部变量。

如果局部变量初始化的时候new了一个对象,这个new对象的操作就是在堆内存中开辟了一个空间,存储该对象,而这个空间的地址值被赋给栈内存中的局部变量,局部变量可以通过地址值指向堆内存中对应的对象。

在堆内存中,对象的成员属性的值是其本身,成员方法的值是方法区中成员方法所在空间的地址值。

方法调用完后,会从栈内存中弹出,里面的局部变量也跟着消失。而其new出来的对象在堆内存中,要等到垃圾回收器空闲的时候被回收。

Java中的类和现实中事物的对应关系

事物相当于类

事物的属性相当于类的成员变量

事物的行为相当于类的成员方法

课后作业

实现从控制台接收一个学员信息,并存储到一个对象中。

打印这个对象的所有属性值。

//设计,并定义一个学员类:Student,要求有以下属性:
//	学员编号(String)
//	姓名(String)
//	性别(String)
//	身高(double)
//	年龄(int)
//使用封装的原则,并提供无参和全参的构造方法。

public class Student {
	
	private String id;
	private String name;
	private String sex;
	private double height;
	private int age;
	
    public Student() {}

	public Student(String id, String name, String sex, double height, int age) {
		this.id = id;
		this.name = name;
		this.sex = sex;
		this.height = height;
		this.age = age;
	}
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public double getHeight() {
		return height;
	}
	public void setHeight(double height) {
		this.height = height;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}	

}
import java.util.Scanner;

//定义MainApp类,并包含main()方法。
//程序启动后,应分别提示用户输入学员编号、姓名等信息。
//例如控制台显示:
//	C:\>请输入学员编号:
//	C:\>....
//	C:\>请输入学员姓名:
//	C:\>....
//	.................
//数据接收到程序中,并定义局部变量存储;
//创建Student对象,通过构造方法将所有数据存储到Student对象中;
//打印对象中的每个属性值。

public class MainApp {
	public static void main(String[] args) {
		
        Student student1 = new Student();
		System.out.println(student1.getAge());    //输出0

		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入学员编号:");
		String id = scanner.next();
		System.out.println("请输入学员姓名:");
		String name = scanner.next();
		System.out.println("请输入学员性别:");
		String sex = scanner.next();
		System.out.println("请输入学员身高:");
		double height = scanner.nextDouble();
		System.out.println("请输入学员年龄:");
		int age = scanner.nextInt();
		
		Student student = new Student(id, name, sex, height, age);
		System.out.println("学员编号:" + student.getId());
		System.out.println("学员姓名:" + student.getName());
		System.out.println("学员性别:" + student.getSex());
		System.out.println("学员身高:" + student.getHeight());
		System.out.println("学员年龄:" + student.getAge());
	}

}

猜你喜欢

转载自blog.csdn.net/qq_40995238/article/details/111964730