【JAVA学习记录】面向对象相关—类和对象

类和对象

定义

类:抽象的、概念上的定义
对象:实际上存在的,也称为实例(instance)

面向对象程序设计的重点:类的设计
设计类就是设计类的成员

类的成员:属性和方法

属性 = 成员变量 = field = 域 = 字段
创建类的对象 = 实例化类 = 类的实例化
方法 = 成员方法 = 函数 = method

类和对象的使用

  1. 创建类
  2. 类的实例化
  3. 调用对象的结构(对象.属性、对象.方法)

如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性(非static)
意味着:如果修改一个对象的属性,不影响另一个对象的属性值

//测试类
public class PresonTest{
	public static void main(String[] args){
		//创建Person类的对象
		Person p1 =  new Person();
		//Scanner scanner = new Scanner(System.in);
		
		//调用结构
		//调用属性:对象.属性
		p1.name = "Tom";
		p1.isMale = true;
		System.out.println(p1.name);	//Tom
		//调用方法:对象.方法
		p1.eat();	//吃饭
		p1.sleep();	//睡觉
		p1.talk("中文");	//说话,使用的是:中文

		//++++++++++++++++++++++++++++++++++++++++
		Person p2 = new Person();
		System.out.println(p2.name);	//null
		System.out.println(p2.isMale);	//False
		//++++++++++++++++++++++++++++++++++++++++
		//将p1变量保存的地址赋值给p3,p1、p3指向了堆空间中的同一个对象实体
		Person p3 = p1
		System.out.println(p3.name);	//Tom
		p3.age = 10;
		System.out.println(p1.age);	//10
	}
}

class Person{
	//属性
	String name;
	int age = 1;
	boolean isMale;
	
	//方法
	public void eat(){
		System.out.println("吃饭");
	}	
	public void sleep(){
		System.out.println("睡觉");
	}
	public void talk(Sting language){
		System.out.println("说话,使用的是:" + language);
	}

}

内存解析

在这里插入图片描述
堆:存放对象实例
栈:存储局部变量(方法中的变量都是局部变量)
方法区:类信息、常量、静态变量、即时编译器编译后的代码
在这里插入图片描述

类中属性的使用

属性 VS 局部变量

1. 相同点
1.1 定义变量的格式:数据类型 变量名 = 变量值
1.2 先声明后使用
1.3 变量都有其对应的作用域

2. 不同点
2.1 在类中声明的位置不同

**属性**:直接定义在{}内
**局部变量**:声明在方法内、方法形参、构造器形参、构造器内部的变量

2.2 权限修饰符不同

**属性**:可以在声明时,指明其权限、使用权限修饰符。
private、public、缺省、protected --> 封装性

2.3 默认初始化值的情况

**属性**:类的属性,根据其类型,都有默认初始化值。
整型(byte、short、int、long):0
浮点型(float、double):0.0
字符型(char):0
布尔型(boolean):false
引用数据类型:null

**局部变量**:没有默认初始化值
在引用前必须显式赋值
特别地:形参在调用时,赋值即可。

2.4 在内容中加载的位置

**属性**:加载到堆中(非static)
**局部变量**:加载到栈中
public class UserTest{

}

class User{
	//属性(成员变量)
	String name;
	int age;
	boolean isMale;

	public void talk(String language){	//language:形参
		System.out.println("使用" + language + "交流");
	}
	public void eat(){
		String food = "饺子";	//局部变量
		System.out.println("中国人喜欢吃:" + food);
	}
}

类中方法的使用

方法:描述应该具有的功能
例:

Math类:sqrt()、random()
Scanner类:nextXxx()
Arrays类:sort()、binarySearch()、toString()、equals()

举例
public void eat(){}	
public void sleep(int hour){}
public String getName(){}
public String getNation(String nation){}

在这里插入图片描述

public class CustomerTest{
	public static void main(String[] args){
		Customer c1 = new
	}
}

//客户类
class Customer{
	//属性(成员变量)
	String name;
	int age;
	boolean isMale;

	public void eat(){
		System.out.println("客户吃饭");
	}
	public void sleep(int hour){
		System.out.println("休息了" + hour + "个小时");
	}
	public String getName(){
		return name;
	}
	public String getNation(String nation){
		String info = "我的国籍是:" + nation;
		return info;
	}

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

private、public、缺省、protected --> 封装性再详细叙述

返回值类型
  1. 有返回值

如果有,在方法声明时,指定返回值类型。同时,方法中需使用return返回该类型的变量或常量

  1. 无返回值

如果没有,在方法声明时,使用void表示。通常,没有返回值的方法中,就不需要使用return;若需要使用时,只能“return;”表示结束此方法。

方法名

遵循标识符规则和规范,见名知义

形参列表

数据类型1 形参1, 数据类型2 形参2, 数据类型3, 形参3

方法体

方法功能的实现

public class CustomerTest{
	public static void main(String[] args){
		Customer c1 = new Customer();

		c1.eat();	//报错
	}
}

//客户类
class Customer{
	//属性(成员变量)
	String name;
	int age;
	boolean isMale;

	private void eat(){
		System.out.println("客户吃饭");
	}
	public void sleep(int hour){
		System.out.println("休息了" + hour + "个小时");
	}
	public String getName(){
		if(age > 18){
			return name;
		}else{
			return "Tom";
		}
	}
	public String getNation(String nation){
		String info = "我的国籍是:" + nation;
		return info;
	}

}
方法的使用
  1. 方法内可以调用当前类中的属性或方法
    特殊地:方法A中有吊用了方法A(递归)
  2. 方法中不能定义方法
public class CustomerTest{
	public static void main(String[] args){
		Customer c1 = new Customer();
		c1.eat();	//客户吃饭
		c1.sleep(8);	/*休息了8个小时
						客户吃饭*/
		
	}
}

//客户类
class Customer{
	//属性(成员变量)
	String name;
	int age;
	boolean isMale;

	public void eat(){
		System.out.println("客户吃饭");
	}
	public void sleep(int hour){
		System.out.println("休息了" + hour + "个小时");
		eat();	//调用了类中的方法
		// sleep(10)	//递归,报错,一直调用,栈溢出
	}
	public String getName(){
		if(age > 18){	//此时调用了类中的属性
			return name;
		}else{
			return "Tom";
		}
	}
	public String getNation(String nation){
		String info = "我的国籍是:" + nation;
		return info;
	}

}

return

使用在方法体中
作用

  1. 结束方法
  2. 有返回值的方法,返回数据
  3. 注意点:return 后面不可以声明语句

面向对象的三条主线

  1. 类及类的成员:属性、方法、构造器;代码块、内部类
  2. 面向对象的三大特征:封装、集成、多态
  3. 其他关键字

面向对象和面向过程的编程思想

面向过程:强调功能行为,以函数为最小单位
面向对象:强调具备了功能的对象,以类/对象为最小单位

类和对象的理解

类是一个抽象的概念;对象是实际存在的个体
对象是类派生出来的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值