Java 面向对象

什么是面向对象

通俗来说,就是拿东西过来做对应的事情
重点:

  • 如何获取已有对象并使用
  • 如何自己设计对象并使用

设计对象并使用

类和对象

  • 类(设计图):是对象共有特征的描述
  • 对象:是真实存在的东西
  • 在Java中,必须先设计类 ,才能获得对象。

如何定义类

public class 类名 {
	1. 成员变量(代表属性,一般是名词),只定义,不给值
	2. 成员方法(代表行为,一般是动词)
	3. 构造器
	4. 代码块
	5. 内部类
}
// 例如定义一个 手机 类
public class Phone{
	// 属性
	String brand;
	double price;
	// 行为(方法)
	public void call(){
	}
	public void playGame() {
	}
}

如何得到类的对象: 使用类名 对象名 = new 类名()的方式

	Phone ph = new Phone()

如何使用对象:

  • 访问属性:对象名.成员变量
p.brand = "oppo”
  • 访问行为:对象名.方法名()
p.call()

定义类的补充注意事项

  • 用来描述一类事物的类,专业叫做:javabean类,里面是不写main方法的
  • 编写main方法的类,叫做测试类,可以在测试类中创建javabean类的对象并赋值调用
  • javabean类包含成员变量和成员方法
  • 一个Java文件中可以定义多个class类,且只能一个类是public修改,而public修饰的类名必须成为代码文件名。实际开发中最好还是一个一个文件定义一个class类
  • 成员变量的完整定义格式:修饰符 数据类型 变量名= 初始化值,一般无需指定初始化值,存在默认值

封装

面向对象的三大特性之一。
对象代表什么,就得封装对应的数据,并提供数据相对应的行为
例如:人关门,门是自己关的,所以开关这个行为就要放在门这个类中

private关键字

  • 是一个权限修饰符
  • 可以修饰成员(成员变量和成员方法)
  • private修饰的成员只能在本类中才能访问
  • 所以每个private属性都提供一个setXxxgetXxx方法进行赋值和获取属性值,这两个方法使用public修饰

this关键字

成员变量和局部变量

成员方法中定义的变量是局部变量,如果两个变量同名了,这时要使用哪一个变量呢?需要用到就近原则,谁近用谁。
如果想要使用成员变量,那么可以在成员变量前加上this关键字,即this.brand
this的作用: 可以区分成员变量和局部变量

构造方法

也叫做构造器、构造函数
作用: 在创建对象的时候给成员变量进行初始化的,也就是在创建对象的时候顺便赋值的
格式:

public class Student {
	修饰符 类名(参数){
		方法体;
	}
}

特点:

  1. 方法名与类名相同,大小写也要一致
  2. 没有返回值类型,连void都没有
  3. 没有具体的返回值,不能由return带回结果数据
    执行时机:
  4. 创建对象的时候由虚拟机调用,不能手动调用构造方法
  5. 每创建一次对象,就会调用一次构造方法
public class Student {
	private String name;
	private int age;
	// 如果没有写任何构造方法,虚拟机会自动添加,空参构造方法
	public Student(){
		...
	}
	// 带全部参数的构造方法
	public Student (String name, int age){
		...
	}
 }

注意事项:
① 构造方法的定义

  • 如果没有定义构造方法,系统将会默认给出一个默认无参构造方法
  • 如果定义了构造方法,系统将不再提供默认的构造方法

②构造方法的重载

  • 带参构造方法和无参构造方法,两者方法名相同,参数不同,这就是构造方法的重载
    ③推荐的使用方式
  • 无论是否使用,都手动书写无参构造 和带全部参数的构造方法

标准JavaBean

  1. 类名要见名知义
  2. 成员变量使用private修饰
  3. 提供至少两个构造方法,分别是无参构造方法和带全部参数的构造方法
  4. 成员方法:每一个成员变量对应的setXxx/getXxx,如果还有其他行为,也要写上
    例:写一个注册页面的JavaBean类
    在这里插入图片描述
public static User{
	private String username;
	private String pwd;
	private String email;
	private String gender;
	private int age;
	// 无参构造方法
	public User(){}
	// 带全部参数的构造方法
	public User(String name, String pwd, String email, String gender, int age){
		this.name = name;
		this.pwd = pwd;
		this.confirmPwd = confirmPwd;
		this.email = email;
		this.gender = gender;
		this.age = age;
	}

	public void setName(String username){
		this.username = username;
	}
	public String name() {
    	return this.username;
    }
    ...
}

这里在IDEA中有个快捷键,一键生成构造方法和set、get。alt + insertaly + Fn + insert
插件:PTG,一秒生成标准javabean。File -> Seetings -> plugins。安装完成后,右键,选择PTG for JavaBean

对象内存图

一个对象的内存图

Student s = new Student

  1. 加载class文件
  2. 申明局部变量
  3. 在堆内存中开辟一个空间
  4. 默认初始化
  5. 显示初始化
  6. 构造方法初始化
  7. 将堆内存中的地址值赋值给左边的局部变量
    在这里插入图片描述

多个对象的内存图

在这里插入图片描述

两个变量指向同一个对象的内存图

在这里插入图片描述
当两个变量指向同一个空间的时候,那么其他变量再次访问的时候,就是改变之后的结果了

this的内存原理

this的作用: 区分局部变量和成员变量
this的本质: 所在方法调用者的地址值
在这里插入图片描述

基本数据类型和引用数据类型的区别

本质区别:

  • 基本数据类型:存储的是真实的数据值
  • 引用数据类型:存储的是 地址值

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

成员变量: 类中方法外的变量
局部变量: 方法中的变量
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值