2022.01.08_Java学习总结_面向对象_1_面向对象、构造方法、类和对象、实例化、Bean

1. 面向对象

1.1 概述

	面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象的概念和应用已超越了程序设计和软件
开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智
能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。

	面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次
来进行系统建模,更贴近事物的自然运行模式。

1.2 面向对象和面向过程

面向过程 : 侧重分步骤
比如要做一件事的时候,先进行分析
第一步应该做什么
第二步应该做什么
......
面向对象 : 侧重分模块
比如要做一件事的时候,分析出这件事应该交给谁去做


总结 : 
面向有对象优势 : 可扩展性,可维护性,灵活性,使程序耦合度降低
缺点 : 性能比面向过程相对较差

1.3 构造方法


	public static void main(String[] args) {
		// 静态属性调用
		// 类名.静态变量  / 类名.静态方法(参数)
		// 调用当前类中的静态属性,类名可以省略
		Contructor_01.m1();
		m1();
		// 成员属性调用
		// 对象.成员变量  / 对象.成员方法(参数)
		// 加前缀 是为了找到
		// 创建对象
		// new : 在堆内存创建对象空间
		// Contructor_01(); : 调用构造方法
		Contructor_01 c = new Contructor_01();
		c.m2();
	}

	public static void m1() {
		System.out.println("静态方法");
	}

	public void m2() {
		System.out.println("成员方法");
	}

* 构造方法 是每个类都有的,并且用于创建该类的对象
 * 
 * 如果 该类中 没有编写构造方法,那么 编译器会自动帮我们生成一个无参构造
 * 
 * 如果 该类中 编写了构造方法,不管写的是不是有参,则 默认的无参构造都不再自动生成
 * 		所以 当我们在写有参构造的时候,可以手动编写一个无参构造
 * 
 * 构造方法语法 : 修饰符   方法名/类名 (参数列表) { 方法体 }
 * 		构造方法的修饰符 我们只使用权限控制即可  , 不能使用static 
 * 		构造方法 没有返回值,void都没有
 * 		构造方法的方法名 必须和类名一致
public class Contructor_02 {
	public static void main(String[] args) {
		// 自动调用构造方法
		Contructor_02 c = new Contructor_02();
	}

	public Contructor_02(int i) {
		System.out.println("构造方法");
	}

	public Contructor_02() {
		System.out.println("构造方法");
	}
}

1.4 类和对象

* 对象 : 
 * 		对象 就是某一个具体的事物
 * 
 *: 描述了这一类事物的属性和特征,进行抽象出的模板 
 * 
 * 而 对象 就是类的实现,保存了属性的值
 * 
 * 在编程中,通过需求或者现实事物的属性和特征,来定义相关的类
 * 通过不同的属性值来定义不同的对象
 * 
 * 如果对象和对象之间 有相同的属性相同的值 就使用静态变量
 * 如果对象和对象之间 有相同的属性不同的值(也可以相同),就使用 成员
public class Student{
	// 姓名
	String name;
	// 学号
	int id;
	// 年龄
	int age;
	// 性别
	boolean sex;
	// 家庭住址
	String addr;
	}
public static void main(String[] args) {
		// 创建一个学生对象
		Student s1 = new Student();
		// 成员变量赋值
		s1.name = "张三";
		//打印成员变量
		System.out.println(s1.name);
		}

1.5 实例化

 * 实例化 : 
 * 		1 加载对应类文件
 * 		2 new在堆内存创建空间
 * 		3 执行构造方法,对堆内存对象进行初始化
 * 		4 构造方法弹栈,并把堆内存地址返回给变量 student
public class OOP_02 {
	// int age ;
	// OOP_02(){
	// age = 2;
	// }
	public static void main(String[] args) {
		// 数据类型 变量名 = 值
		int i = 213;
		char c = 'a';
		// 变量
		Student student = new Student();
		// 字面量
		new Student();

1.6 对象使用

// 创建一个学生对象
		Student s1 = new Student();
		// 成员变量赋值
		s1.name = "张三";
		s1.age = 18;
		// 成员变量调用
		System.out.println(s1.name);
		System.out.println(s1.age);
		// 以下三个属性没赋值,则取默认值
		System.out.println(s1.id);
		System.out.println(s1.sex);
		System.out.println(s1.addr);
		
		// 再创建一个学生对象
		Student s2 = new Student();
		// null
		System.out.println(s2.name);

1.7 Bean

在这里插入图片描述

就是公共的类,私有化的属性,公共的获取属性的方法(getter/setter),公共的无参构造

在这里插入图片描述

public class User {
	private int id;
	private String username;
	private String password;
	private String nickname;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

1.8 常见异常

在这里插入图片描述

1.9 对象调用静态属性

在这里插入图片描述
在这里插入图片描述

// 静态属性 使用类名调用
		System.out.println(Student.i);
		// 也可以使用对象调用,在编译阶段 会把对象转换为类名调用,所以 该变量 是不是null 是没有关系
		System.out.println(student.i); // Student.i
		student = null;
		System.out.println(student.i); // Student.i

在这里插入图片描述

Student.i = 18;
		// 18
		System.out.println(Student.i);
		Student s1 = new Student();
		Student s2 = new Student();
		// 18
		System.out.println(s1.i);
		// 18
		System.out.println(s2.i);
		
		s2.i = 28;
		// 28
		System.out.println(s1.i);
		// 28
		System.out.println(s2.i);
		// 28
		System.out.println(Student.i);

1.10 注释事项

1.10.1 静态调用成员

在这里插入图片描述

public static void main(String[] args) {
		// 静态方法中,无法直接使用非静态属性
		// 需要使用对象调用才行
		// System.out.println(b);
		OOP_04 o = new OOP_04();
		o.b = 40;
		o.m1();
		// o.m2();
	}

	// 静态变量 : 对象之间共有的属性和值
	// 成员变量 : 对象之间共有的属性不同的值,但值也可以相等
	// 成员方法 : 方法中需要使用成员属性的时候,定义为成员方法
	// 静态方法 : 方法中不需要使用成员属性的时候,定义为静态方法
	public void m1() {
		System.out.println(b);
		System.out.println(a);
	}

1.10.2 传值和传引用

public class OOP_05 {
	public static void main(String[] args) {
		// int i = 10;
		// m1(i);
		// System.out.println("main->" + i);

		Animal a = new Animal(18);
		m2(a);
		System.out.println(a.age);
	}

	public static void m1(int i) {
		++i;
		System.out.println("m1->" + i);
	}

	public static void m2(Animal a) {
		a.age++;
		System.out.println(a.age);
	}
}

1.10.3 区分成员方法和构造方法

public class OOP_06 {
	public static void main(String[] args) {
		OOP_06 o1 = new OOP_06();
		// OOP_06 o2 = new OOP_06(15);
	}

	// 构造方法
	public OOP_06( ) {
		System.out.println("无参构造");
	}
	// 成员方法,成员方法可以和类名相同
	// 如何区分同名的成员方法和构造方法呢?  看返回值,构造方法没有返回值,void都没有
	public void OOP_06(int i) {
		System.out.println("有参构造");
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值