Java面向对象基础

1. 面向对象概述

1.1 概述

  • 面向对象(Object
    Oriented)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
  • 面向对象是相对于面向过程来讲的,指的是把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系 统建模,更贴近事物的自然运行模式。
    面向过程到面向对象思想层面的转变:面向过程关注的是执行的过程,面向对象关注的是具备功能的对象。
  • 面向过程到面向对象,是程序员思想上从执行者到指挥者的转变。

1.2 三大思想

面向对象思想从概念上讲分为以下三种:OOA、OOD、OOP

  • OOA:面向对象分析(Object Oriented Analysis)
  • OOD:面向对象设计(Object Oriented Design)
  • OOP:面向对象程序(Object Oriented Programming)

1.3 三大特征

  • 封装性:所有的内容对外部不可见
  • 继承性:将其他的功能继承下来继续发展
  • 多态性:方法的重载本身就是一个多态性的体现

2. 类与对象的关系

  • 类表示一个共性的产物,是一个综合的特征,而对象,是一个个性的产物,是一个个体的特征。(类似生活中的图纸与实物的概念。)
  • 类必须通过对象才可以使用,对象的所有操作都在类中定义。
  • 类由属性和方法组成:
    1. 属性:就相当于人的一个个的特征,例如:身高、体重、性别、年龄
    2. 方法:就相当于人的一个个的行为,例如:说话、吃饭、唱歌、睡觉

3. 类与对象的创建

3.1 类的定义格式

class 类名{
	成员属性;
	成员方法;
}
eg:
class Person{
	private int age;	//成员属性
	public void say(){}	//成员方法
}

注意:类型必须编写在.java文件中。一个.java文件中,可以存在N个类,但是只能存在一个public修饰的类(即一个文件只能存在一个主类)。.java文件的文件名称必须与public修饰的类名完全一致。同个包中不能出现相同名称的类!

3.2 属性与方法

属性定义格式:

数据类型 属性名;
eg: int age;

属性定义并赋值的格式:

数据类型 属性名 = 初始值;
eg: int age = 18;

方法的定义格式:

[权限修饰符] 返回值类型 方法名(形式参数列表){
	方法体
	return 返回值;
}
eg: public boolean say(){
	return true;
}

例如(权限修饰符可省略):

int say(){
	return 0;
}

(注意:学习完面向对象进阶后,涉及到类的封装时,权限修饰符一般都不省略)

3.4 创建对象格式

创建对象格式:

类名 对象名 = new 类名();
eg: Person p = new Person();

例如:给创建一个对象1并为其起别名对象名2

类名 对象名1 = new 类名();
类名 对象名2 =对象名1;
eg:
Person p1 = new Person();
Person p2 = p1;

对象属性赋值:

对象名.属性名=;
eg: p.age = 20;

调用类中方法:

对象名.方法名称(实际参数列表);
eg: p.say();

4. 对象创建内存

4.1 栈

Java中栈的存储区域很小,大概2m左右,特点是存取的速度特别快。

  • 栈存储的特点是:先进后出
  • 存储速度快的原因: 栈内存,通过’栈指针’来创建空间与释放空间!指针向下移动,会创建新的内存, 向上移动, 会释放这些内存!
    这种方式速度特别快 , 仅次于PC寄存器!
  • 栈存储的缺点: 但是这种移动的方式,必须要明确移动的大小与范围,明确大小与范围是为了方便指针的移动,这是一个对于数据存储的限制,存储的数据大小是固定的,影响了程序的灵活性 。
    所以我们把更大部分的数据 存储到了堆内存中
  • 栈存储的数据是: 基本数据类型的数据以及引用数据类型的引用!
    例如:
int a =10;
Person p = new Person();

数据“10”存储在栈内存中,第二句代码创建的对象的引用“p”存在栈内存中

4.2 堆

  • 存储的是: 类的对象
    Java是一个纯面向对象语言, 限制了对象的创建方式: 所有类的对象都是通过new关键字创建
  • new关键字的作用: 告诉JVM ,需要明确的去创建一个新的对象 , 去开辟一块新的堆内存空间。
    堆内存与栈内存不同, 优点在于我们创建对象时,不必关注堆内存中需要开辟多少存储空间,也不需要关注内存占用时长!堆内存中内存的释放是由GC(垃圾回收器)完成的。
  • 垃圾回收器(GC)回收堆内存的规则:
    当栈内存中不存在此对象的引用时,则视其为垃圾 , 等待垃圾回收器回收 !
  • 例如:(其中p0将会被回收)
Person p0 = new Person();
Person p1 = p0;
Person p2 = new Person();

5. 构造方法(构造器)

5.1 概述

  • 作用: 用于对象初始化。
  • 执行时机: 在创建对象时,自动调用
  • 特点: 所有的Java类中都会至少存在一个构造方法。如果一个类中没有明确的编写构造方法,则编译器会自动生成一个无参的构造方法,构造方法中没有任何的代码!如果自行编写了任意一个构造器,则编译器不会再自动生成无参的构造方法。

5.2 定义格式

public class Demo{
	public static void main(String[] args){
		Personp=new Person(可传参数);
	}
}
class Person{
	public Person(可传参数){可直接调用以下定义的变量}
}

6. 方法的重载(同名方法)

一个类中定义的方法,是允许重载(相同方法名称)。
什么是方法重载:

  1. 方法名称相同
  2. 参数列表长度或参数列表类型或(参数类型顺序不同)

注意:与方法的返回值类型无关!

例如:

class Sum{
	int sum(int x,int y){
		int z = x + y;
		return z;
	}
	double sum(double x,double y){
		double z = x + y;
		return z;
	}
}

注意:类中的构造方法也可以重载!一般设置无参构造方法和有参构造方法。

7. 匿名对象

概念: 没有对象名称的对象就是匿名对象。匿名对象只能使用一次,因为没有任何的对象引用,所以将称为垃圾,等待被GC回收。只使用一次的对象可以通过匿名对象的方式完成,这一点在开发中将经常使用到。
例如:

//一般对象创建
Math m=new Math();
int num=m.sum(100, 200);
//匿名对象创建
int num=new Math().sum(100, 200)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值