java 第四章 Java面向对象编程基础

第四章 Java面向对象编程基础
4.1 面向过程和面向对象思想
1,面向对象分为:
面向对象的分析OOA,面向对象的设计OOD,面向对象的编程OOD。

   面向对象宏观把握,从整体上分析整个系统,
   具体部分微观操作的实现还是面向过程的思想解决。 
   面向对象和面向过程相辅相成。
   
2,面向对象和面向过程思想总结:
	.都是解决问题的思考方式,都是代码组织的方式 。
	.解决简单问题,面向过程。
	.解决复杂问题,宏观上面向对象,微观上面向过程。
	
3,面向对象的思考方式
	遇到复杂问题,
	找名词-->确立名词类-->根据问题需求确定类的属性和方法-->确定类之间的关系。
	
	面向对象思想的三大特征:封装(功能+数据),继承,多态。
	可维护性高,耦合度低。
	 
	面向过程思想:功能封装 

4.2 对象的进化史
对象也是一种数据结构,他将数据和数据行为放在一起。
内存上对象就是一个内存块,存放了相关的数据集合。
对象的本质就是一种数据的组织方式。

4.3 对象和类的概念
1,类(图纸)是对对象(建筑)的抽象
类class,对象Objiect/实列instance

总结:
	对象是具体的事物,类是对对象的抽象。
	类可看成是一类对象的模板,对象可看成是该类的一个具体实例。
	类是用于描述同一类对象的一个抽象概念,
	类中定义了这一类对象共同具有的属性和方法。

4.4 类和对象初步
4.4.1 第一个类的定义
1,类的定义方式
//每一个源文件必须有且仅有一个public class,类名和文件名保存一致。
public class car{
}
class Type{//一个Java文件可以同时定义多个class
}
class Engine{
}

	三种常见类成员:
	属性field,方法method,构造器constructor
	
	//编写简单学生类
	public class SxtStu{
		//属性(成员变量) 
		int id;
		String name;
		int age;
		
		//方法
		void study(){
			System.out.println("我正在学习")
		} 
		
		//构造器
		 SxtStu(){
		 } 
	} 
	
	
4.4.2 属性field 
	静态特征,属性用于类或类对象包含的数据。作用范围是整个类体,
	在定义成员变量时可以对其初始化,不对其初始化时由Java自动初始化。
	整型 0,浮点型 0.0,字符型 '\u0000',布尔 false,引用类型 null.
	
	属性定义格式:
	[修饰符] 属性类型 属性名 = [默认值];
	 
4.4.3 方法
	定义格式
	[修饰符] 方法返回类型 方法名(形参列表){
		//n条语句; 
	} 
	 
4.4.4 一个典型类的定义和UML图 

4.5 面向对象的内存分析
Java虚拟机内存分为三个区域:栈stack,堆heap,方法区methodarea.

栈的特点:
.栈描述的是方法执行的内存模型,每个方法被创建是都会创建一个栈帧(存储局部变量,操作数,方法出口等)。
.Jvm为每一个线程创建一个栈,用于存放该线程执行方法的信息(实际参数,局部变量等)。
.栈属于局部私有,不能实现线程间的共享。
.栈的存储特性:后进先出
.栈由系统自动分配,运算速度快。
.栈是一个连续的内存空间。 

堆的特点:
.用于存储好的对象和数组。
.jvm只有一个堆,被所有线程共享。
.堆是一个不连续的内存空间,分配灵活,运算速度慢。

方法区(静态区)特点:
.jvm只有一个方法区,被所有线程共享。
.方法区实际也是堆,只是准,专门用来存储类,常量的相关信息。
.用来存储程序中永远不变或唯一的内容(eg:Class对象,静态变量,字符串常量) 

4.6 对象的使用及内存分析
.同一类的每个对象有不同的成员变量存储空间。
.同一类的每个对象共享该类的方法。

4.7 构造器(构造方法constructor)
.创建对象时被自动调用的特殊方法,用于对象的初始化。
.构造器的名称要与类的名称一致。
.java通过new关键字来调用构造器,从而返回该类的实列,他是一个特殊的方法。
.不能定义返回值类型,不能使用return返回某个值。
.如果没有定义构造器,编译器会自动定义一个无参的构造函数。
已定义编译器不自动添加。
.
构造器格式:
[修饰符] 类名(参数列表){
//n条语句;
}

创建一个对象步骤:
1.分配对象空间,并将对象成员变量初始化为0或空。
2.执行属性值的显示初始化。
3.执行构造函数。
4.返回对象的地址给相关变量。

4.8 构造器的重载
1.构造器也是方法,可以重载。
如果方法构造中形式参数与属性名相同,需要使用this关键字区分属性与形参。

4.9 垃圾回收机制(Garbage Collection)
4.9.1 垃圾回收的原理和算法
1,内存管理
对象空间的分配:使用new关键字创建对象即可。
对象空间的释放:将对象赋值为null即可。

	2,垃圾回收过程
		发现无用对象
		回收无用对象占用的内存空间。
	
	3,垃圾回收算法
		.引用计数:算法简单,但是循环引用的无用对象无法识别。
		.引用可达法(根搜索算法):
			寻找对应引用节点,找到这个节点后继续寻找这个节点的引用节点。
			当所有引用节点寻找完毕后,剩余节点被人为无用节点。
				
4.9.2 通用的分代垃圾回收机制(略) 
	1,通过对象的生命周期不同,采取不同的回收算法。
	对象分为:年轻代,年老代,持久代 
4.9.3 JVM调优和Full Gc(略) 
4.9.4 开发中容易造成内存泄漏的操作 
	1,创建大量无用对象
	2,静态集合类的使用
		HashMap,List,Vector等。 
	3,各种连接对象未关闭
		I/O流对象,数据库连接对象,网络连接对象等。 
	4,监听器的使用
		释放对象时没有删除相应的监听器。 
		
程序员无权调用垃圾回收器
程序员可以使用System.gc()方法通知jvm。这回申请FullGc,成本高,影响系统性能。
finalize方法,可以释放对象或资源。少用。

4.10 this关键字
this本质就是“创建好的对象的地址”,在构造器中可以使用this关键字代表“当前对象”

this最常见的用法:
	1.在程序中产生二义性处,使用this指代当前对象。
	  普通方法中this总是指向调用该方法的对象。
	  构造器中this总是指向正要初始化的对象。 
	  
	2. 使用this关键字调用重载的构造器,避免相同的初始化代码。
		但只能在构造器中第一句使用。
	
	3.this不能使用在static方法中。

4.11 static关键字
1,类中使用static声明的变量为静态成员变量,也称类变量。
类变量声明周期与类相同,在整个应用程序执行期间都有效。

2,特点
	1,static方法中不可直接访问非static的成员。
	2,类变量是该类的公用变量,属于类,被该类的所有实例共享,在类被载入时显示初始化。
	3,对于该类的所有对象来说,static成员变量只有一份,被该类的所有对象共享。
	4,一般用“类名.类属性/方法”来调用,也可以通过对象引用或类名访问静态成员。

4.12 静态初始化块
1,构造器用于对象的初始化。
静态初始化块用于类的初始化操作,在静态初始化块中不能直接访问非static成员。

4.13 参数传值机制
Java方法中所有参数都是“值传递”,即”传递的时值的复印件“
1,基本数据类型参数的传值
传递值的副本,副本改变不会影响原件
2,引用数据类型参数的传值
传递地址的副本,但是副本和原参数都是指向同一个地址,
改变副本指向地址对象的值,也就意味着原参数指向对象的值发生了改变。

4.14 包
包是Java管理类的机制,解决类重名问题,实现对类的有效管理。
4.14.1 package
1,使用要点
他通常是类的第一句非注释语句
包名用,域名倒着写即可,再加上模板名,这样便于内部管理类

	2,写项目时都要加包,不要使用默认包。
		 
4.14.2 jdk中常用的包
	略 
4.14.3 导入类
	要使用其他包的类,使用import导入,从而可以在本类中通过类名来调用需要的类。
	如果导入两个同名类,只能用报名+类名来调用相关类
	格式:java.util.Date date = new java.util.DAte(); 
	
4.14.4 静态导入 static import
	JDK1.5后增加的功能,作用:导入指定类的静态属性。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值