Java_day_07_类与对象、构造器、封装、内存划分详解

本文深入探讨了面向对象编程的概念,强调其模块化和灵活性的优势,并通过Java代码示例展示了静态成员、构造方法、类与对象的实例化、对象调用以及注意事项。面向对象编程提高了代码的可扩展性和可维护性,降低了耦合度,但可能在性能上逊于面向过程编程。
摘要由CSDN通过智能技术生成

1 概述

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

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

2 面向对象和面向过程

面向过程 : 侧重分步骤

比如要做一件事的时候,先进行分析

第一步应该做什么

第二步应该做什么

......

面向对象 : 侧重分模块

比如要做一件事的时候,分析出这件事应该交给谁去做

总结 :

面向有对象优势 : 可扩展性,可维护性,灵活性,使程序耦合度降低

缺点 : 性能比面向过程相对较差

3 静态与成员

package _01_Contructor;

public class Contructor_01 {

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

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

4 构造方法

package _01_Contructor;
/**
 * 构造方法 是每个类都有的, 并且用于创建该类的对象
 * 
 * 如果 该类中 没有编写构造方法 编译器会自动帮我们生成一个无参构造
 * 
 * 如果该类中 编写了构造方法,不管写的是不是有参,则 默认的无参构造都不能自动生成
 * 		所以当我们在写有参构造的时候,可以手动编写一个无参构造
 * 
 * 构造方法语法 : 修饰符 方法名/类名 (参数列表) {方法体}
 * 			够着方法的修饰符,我们值使用权限控制即可,不能使用static
 * 			构造方法没有返回值,void都没有
 * 			构造方法的方法名.必修和类名一致
 * @author SEC90
 *2022年1月8日上午11:35:04
 */
public class Contructor_02 {
	public static void main(String[] args) {
		
		//自动调用构造方法
		Contructor_02 contructor_02 = new Contructor_02();
		
	}
	
	public  Contructor_02() {
		System.out.println("构造方法");
	}
	public  Contructor_02(int n) {
		System.out.println("构造方法");
	}
}

5类和对象

package _02_OOP;
/**
 * 对象:
 * 		对象就是某一个具体的事物
 * 
 * 类: 
		描述了这一类事物的属性和特征,进行抽象出的模板
		
	而,对象 就是类的实现,保存了属性的值
	
	在编程中,通过需要或者实现事物的属性和特征,,来定义相关的类
	通过不同的属性值来定义不同的对象
	
	如果对象和对象之间 有相同的属性相同的值 就使用静态变量
	如果对象和对象之间 有相同的属性不同的值(也可以不同) 就使用 成员变量
 * 
 * @author SEC90
 *2022年1月8日上午11:46:08
 */
public class OOP_01 {
	public static void main(String[] args) {
		Student s1 = new Student();
		s1.name = "张三";
		Student s2 = new Student();
		s2.name = "李四";
		System.out.println(s1.name);
		System.out.println(s2.name);
	
	}
}

5.1 学生类

public class Student {
//姓名
	String name ;
	//学号
	int id;
	//年龄
	int age;
	//性别
	boolean sex;
	//家庭住址
	String home ;
	
}

6 实例化

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

7 对象使用

	//创建一个学生对象
		Student student2 = new Student();
		//成员变量赋值
		student2.name = "www";
		student2.age = 18;
		//成员变量调用,取默认值
		System.out.println(student2.age);
		System.out.println(student2.home);
		System.out.println(student2.id);
		System.out.println(student2.name);
		System.out.println(student2.sex);

8 Bean

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

package _02_OOP;

public class Uer {
	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;
	}
	private int id;
	private String userName;
	

}

9 常见异常

		//java.lang.NullPointerException
//		student = null;
//		//当使用null值 访问成员属性的时候, 会出现空指针异常
//		System.out.println(student.age);

10 对象调用静态属性

		//静态属性使用 类名调用
		//为空也可以调用,有默认值
		//也可以使用 对象调用 会把对象转换为类名调用,所以该变量 是不是null 是没有关的
		System.out.println(Student.i);
		System.out.println(student.i);
		student = null;
		System.out.println(student.i);	
	//静态变量用不同的对象调用 值没有影响
		student.i  = 18;
		Student student2 = new Student();
		System.out.println(student2.i  ) ;
		System.out.println(student.i );

11 注意事项

11.1静态调用成员

package _02_OOP;
/**
 * 成员能直接访问静态
 * 静态方法不能直接使用非静态变量
 * 需要使用对象调用才行
 * 
 * @author SEC90
 *2022年1月8日下午3:31:25
 */
public class OOP_4 {
	static int a = 10;
	int b = 20;
	
	public static void main(String[] args) {
		OOP_4 o = new OOP_4();
		o.b = 40;
		o.m1();
	}
	
	//静态变量 : 对象之间共有的值和属性
	//成员变量 :对象之间共有属性不同的值,但值可以相等
	//成员方法: 方法中需要使用成员属性的时候,定义为成员方法
	//静态方法 :方法中不需要使用成员属性的时候,定义为静态方法
	
	public void m1() {
		System.out.println(b);
		System.out.println(a);
	}


11.2 传值和传引用

package _02_OOP;
/**
 * 注意传引用
 * 
 * @author SEC90
 *2022年1月8日下午4:03:32
 */
public class OOP_05 {
	public static void main(String[] args) {

		// int i = 10;
		// m1(i);
		// System.out.println("mian->"+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);
	}
}

	class Animal {
		int age;
		public Animal(int age_) {
			age = age_;
			
		}

	}

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

package _02_OOP;

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、付费专栏及课程。

余额充值