Java--类与对象

Java是面向对象编程
首先看一下面向对象三大基本特征:
封装性 :内部操作对外部不可见(保护性)
继承性 :可以使用现有类的所有功能,并且再无需重新编写原有类代码的情况下进行功能上的扩展(子类可以使用父类的属性、方法)
多态性 : 指一个类实例的相同方法在不用情况下有不同的表现形式。

类与对象的概念

类是共性的概念,就是由方法和属性组成的一个集合体称为类。
对象是一个具体的、可以使用的事物。是对类的具体化。
比如:人类–就是一种类,而”张三“就是一个对象,是人类这种类的一个具体表现。

类与对象的定义与使用

class 类名称{
	属性1;
	属性2;
	...
	属性n;

	方法1() {}
	方法2() {}
	...
	方法3() {}
}

实例:

class Person{
	public String name;
	public int age;

	public Person(String name,int age){
		this.name = name;
		this.age = age;
	}
	public String getPersonInfo(){
		return "姓名" + this.name + ",年龄" + this.age;
	}
}

生产对象:

类名称 对象名称 = new 类名称();
eg:Person person = new Person();
也可以是:Person person = new Person(“abaka”,21);//因为Person类覆写了构造方法

对象的使用:对象.属性 或者 对象.方法

对象内存分析

我们先将java中的内存区域分成栈内存和堆内存两块区域。
1.栈内存(虚拟机局部变量表):存放的是局部变量(包含编译器可知的各种基本数据类型、对象引用),java栈是与线程对应的,每当创建一个线程,JVM就会创建一个栈。
2.堆内存:保存真正数据也就是对象属性信息的地方。

举例说明:

class Person{
	String name;
	int age;
}
public class Test{
	public static void main(String[] args){
		Person person = new Person();
		person.name = "abaka";
		person.age = 21;
	}
}

mian的第一张代码Person person = new Person();分配内存如下图:
在这里插入图片描述

person.name = “abaka”;
person.age = 21;
在这里插入图片描述

对象(引用数据类型)必须在实例化后调用,否则会出现空指针异常(NullPointerException),只有引用类型(数组、类、接口)才会出现这种异常。

引用传递分析

person p1 = new Person(); //第一步
person p2 = new Person(); //第二步
p2 = p1; //第三步
内存如下:
在这里插入图片描述
执行第三步后
在这里插入图片描述
垃圾内存:没有任何栈内存指向的堆内存空间

注意:
1.类中属性必须使用private封装,属性若要被外部访问,必须定义setter、getter方法。
2.构造方法就是使用关键字new实例化新对象来进行调用的操作方法,对于构造方法的定义有以下三个原则:

方法名必须与类名相同
没有返回值类型声明
每个类中至少存在一个构造方法,没有明确定义系统会自动生产一个无参构造。

3.类的属性是在对象开辟堆内存时开辟的空间
4.构造方法是在使用new后调用的
5.普通方法是在开辟了空间、构造方法执行之后可以多次调用的
6.构造方法的调用和对象内存分配几乎是同步完成的,因此我们可以利用构造方法来为类中的属性进行初始化操作,可以避免多次使用setter调用。(要覆写有参构造,通过有参构造对属性进行初始化)
7.构造方法允许重载,重载时参数类型或者个数不同就可以

匿名对象: new Person(“abaka”,21). 方法
由于匿名对象不会有任何的栈空间所指向,所以使用一次后就称为垃圾空间。

猜你喜欢

转载自blog.csdn.net/qq_39032310/article/details/85084170