【尚硅谷-Java学习】4.1 面向对象

Java类及类的成员:

面向对象的三大特征:

其它关键字:

面向对象的思想

类是抽象概念
对象是类的实例化。
面向对象的重点是类的设计,即设计类的成员。

属性(field):即成员变量,也称为域、字段
方法(method):即成员方法

1. 类和对象的使用

1.⭐设计类
2.对象的创建
3.通过“对象.属性”“对象.方法”调用对象结构


public class PersonTest {
	public static void main(String[] args) {
	//2.对象的创建
		Person p1 = new Person();
	//3.调用
		p1.name = "Tom";
		p1.isMale = true;
		
		p1.eat();
		p1.talk("English");
	}

}
//1.设计类
class Person{
	//属性
	String name;
	boolean isMale;
	//方法
	public void eat(){
		System.out.println("人可以吃饭");
	}
	public void talk(String language){
		System.out.println("人可以说话,语言:"+language);
	}
}

对象的创建和使用:内存解析

堆:存放对象实例(new出来的结构),包括属性,类中未赋值的属性会存储初始值。同一个类的多个对象是完全独立的结构。
栈:存储局部变量(例如对象名),其中保存的是对象的首地址。
方法区:存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等。

2.万事万物皆对象

  • Java语言中:将功能和结构等都封装到类中,通过类的实例化来调用具体的功能结构。
  • 涉及到Java语言和前端Html、后端的数据库交互时:前后端结构在Java层面交互时,都体现为类、对象。

3.属性(成员变量) vs 局部变量

  • 不同点
    1.在类中声明的位置不同:
    属性:直接定义在类的{ }内。
    局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
    2.权限修饰符不同
    属性:可以在声明属性时,指明权限修饰符(private、public、缺省、protected)
    局部变量:不可以使用权限修饰符
    3.默认初始化值
    属性:根据类型,有默认初始化值。
    局部变量:没有默认初始化值,调用之前必须显式赋值。(形参在调用时赋值)
    4.在内存中加载的位置
    属性:堆空间(非static)
    局部变量:栈空间中

4. 方法

描述类应该具有的功能。

分类:
可以分为有形参、无形参。
也可以分为有返回值、无返回值

方法的声明:

权限修饰符 返回值类型 方法名(形参列表){
		方法体
}

方法的重载

同一个类中,允许存在一个以上的重名方法,只要参数个数或参数类型不同即可。
和权限修饰符、返回值、形参变量名、方法体都无关。

public void getMax(int i,int j){...};

public void getMax(double i,double j){...};

println()方法也是方法的重载。println(int m),println(String s)……

可变个数形参

传入的实参可以是0个、1个、多个。

public void show(String ... strs){
	System.out.println(strs.length);
	System.out.println(strs[0]);
}

可变个数形参的方法同样能够构成重载。例如:

public void show(String s){
}

可变个数形参另一种方式:数组
注意:两种方式不构成重载,只能选其一,否则会冲突。

public void show(String[] strs){
}

方法中的可变个数形参必须在最后,因此可知一个方法的可变个数形参只能有一个。

public void show(int i,String ... strs){
}

方法的形参的值传递机制

  • 基本数据类型的实参,传递给形参的是实参的。方法内做出的改变不会影响方法外的实参
  • 引用数据类型的实参,传递给形参的是实参的对象的地址,方法内做出的改变会修改对象。

递归方法

5. 创建对象数组

例如已经定义Student类,当需要创建很多学生对象时

//声明Student类型的数组
Student[] stus = new Student[20];
for(int i=0;i<20;i++){
	//给数组元素赋值	
	stus[i] = new Student();

	}

对象数组的内存解析

  • 声明数组:
    堆中:长为20的数组,存储的元素都是null
    栈中:变量stus,存储数组的首地址

  • 给数组元素赋值
    堆中:新生成20个Student对象,对象中有各种属性;数组中的元素分别是对象的首地址。

6. 匿名对象

创建的对象没有显式赋给变量名。

特点:只能调用 一次。

例如有一个Phone类,属性price,方法sendEmail()、playGame()。

new Phone().sendEmail;
new Phone().playGame;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值