第四章 面向对象程序设计(上)

版本:JDK1.8
注:观看尚硅谷视频的复习笔记

一、面向对象

1、面向过程(POP)与面向对象(OOP)

面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。

面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。

2、面向对象的三大特征

封装 (Encapsulation)、继承 (Inheritance)、多态 (Polymorphism)

3、对象内存解析
请添加图片描述

堆(Heap),此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。

通常所说的栈(Stack),是指虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char 、 short 、 int 、 float 、 long 、double)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。 方法执行完,自动释放。

方法区(Method Area),用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

二、属性

1、属性(成员变量):

(1)、直接定义在类中的

(2)、可以在声明属性时,指明其权限,使用权限修饰符private、public、缺省、protected

(3)、有默认初始化值

(4)、加载到堆空间中(非static)

2、局部变量:

(1)、声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量

(2)、无默认初始化值

(3)、加载到栈空间中

三、方法

1、声明

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

2、可以调用本类中的属性或方法

(一)、方法的重载

在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。

跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系!

(二)、可变个数的形参
  1. 声明格式:方法名(参数的类型名 …参数名)
  2. 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
  3. 可变个数形参的方法与同名的方法之间,彼此构成重载
  4. 可变参数方法的使用与方法参数部分使用数组是一致的
  5. 方法的参数部分有可变形参,需要放在形参声明的最后
  6. 在一个方法的形参位置,最多只能声明一个可变个数形参
public class MethodArgsTest {
	
	public static void main(String[] args) {
		
		MethodArgsTest test = new MethodArgsTest();
		test.show(12);
		test.show("hello");
		test.show("hello","world");
		test.show();
		
		test.show(new String[]{"AA","BB","CC"});
		test.show("AA","BB","CC");
		
	}
	
	public void show(int i){
		
	}
	
	public void show(String s){
		System.out.println("show(String)");
	}
	
	public void show(String ... strs){
		System.out.println("show(String ... strs)");
		
		for(int i = 0;i < strs.length;i++){
			System.out.println(strs[i]);
		}
	}
	//不能与上一个方法同时存在
//	public void show(String[] strs){
//		
//	}
	
	public void show(int i, String ...strs){
	}
//	public void show(String ...strs,int i){
//		
//	}
	
}
(三)、方法参数传递

1、基本数据类型实参赋给形参的是数据值

2、引用数据类型实参赋给形参的是地址值

(四)、递归

一个方法体内调用自身

public class HelloWorld {
	public static void main(String[] args) {
		HelloWorld helloWorld = new HelloWorld();
		System.out.println(helloWorld.getSum(100));
	}
	public int getSum(int n) {
		if(n==1) {
			return 1;
		}else {
			return n + getSum(n-1);
		}
	}
}

四、对象

1、匿名对象

创建对象,没有显式的赋一个变量名,即为匿名对象

匿名对象只能调用一次

//new了  不是一个对象
new Person().name = "hjah";
new Person().showName();

五、封装与隐藏

1、程序设计追求高内聚低耦合

高内聚 :类的内部数据操作细节自己完成,不允许外部干涉

低耦合 :仅对外暴露少量的方法用于使用。

2、隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。

3、封装

private修饰属性,使用getter()与setter()方法使用属性。

4、权限修饰符

private<default(缺省)<protected<public

可以修饰属性、方法、构造器、内部类

修饰类只能使用缺省或public

(1)、private:类内部

(2)、default:同一个包下

(3)、protected:不同包的子类

(4)、public:同一个工程

六、构造器

1、构造器的作用:创建对象

2、系统默认提供一个无参构造器

3、自定义有参构造,在创建对象时初始化对象属性。

七、JavaBean

一个公共的类,有一个无参公共构造器,有属性且有其对应的getter和setter方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值