JavaSE基础知识点记录 06章 面向对象编程(基础)

JavaSE面向对象编程基础知识点

目录

6-1 面向对象思想

6-2 类的成员与实例化

6-3 内存解析与匿名对象

6-4 类的成员之一:成员变量

6-5 类的成员之二:方法

6-6 类的实例化与内存解析

6-7 对象数组

6-8 方法的重载

6-9 可变个数形参的使用

6-10 方法的值传递机制

6-11 递归方法(难点)

6-12 关键字package与import

6-13 面向对象的特征之一:封装性

6-14 权限修饰符的使用

6-15 类的成员之三:构造器

6-16 属性赋值过程、JavaBean与UML


6-1 面向对象思想

程序设计思路:面向对象OOP与面向过程POP

面向过程:重点在过程,把每一步抽象成函数

面向对象:重点在类,参照现实把所有事物的属性与行为抽象出来,以类为单位

面向对象更适合复杂场景

6-2 类的成员与实例化

Java的基本元素:类与对象

类是抽象的,对象是具体的(也可叫做实例)

对象是类的实例化。

类是一组属性与行为的集合。对应成员变量与成员方法。

面向对象完成的步骤:

1、类的定义:使用class定义。

public class Person{……}

并且在里面设置变量与方法。

2、对象的创建:使用new创建。

类名 对象名 = new 类名();

3、对象调用属性与方法

对象名.成员变量

对象名.方法

后面可以加多个,可能有类的成员变量为类,其自身包含变量与方法

6-3 内存解析与匿名对象

匿名对象:直接调用对象的方法不单独创建有对象名的实例

只能使用一次,后面其他的与本次使用的不会是一个。

只使用方法时常用

eg. new Person().speak();

这里new出来的Person是没有名字的。

内存解析:重点关注Runtime Data Area

堆:new出来的内容,存放对象实例(栈中的类名实际上是地址,地址指向类存储的位置也就是堆里面)

栈:方法内定义的变量,存储局部变量,结束会自动释放

方法区:类的模版,存储类信息、常量、静态变量

6-4 类的成员之一:成员变量

声明:

eg. public class Person{

        private int age = 20;

}

修饰符:常用有private、缺省(default)、protected、public

变量包括:成员变量与局部变量

前者在类体内声明,后者在方法体内部声明

二者存储的位置不同:成员变量在堆中,局部变量在栈中

修饰符:成员变量有很多种,局部变量只有final

对于默认值,实例变量有,而局部变量灭有必须手动初始化(必须赋值)

前者的默认值与普通类型相同。

6-5 类的成员之二:方法

声明:

eg. public int getAge{

        return this.age;

}

完整的方法 = 方法头 + 方法体

方法修饰符是可选的,有很多种。返回值类型可以是void表示无返回。形参列表,里面属于局部变量。

return后不能接执行语句,return返回给调用的地方(通常为main而不是实例本身)

6-6 类的实例化与内存解析

调用方法时:调用前在字节码文件.class中存储着。调用时进入栈内存,入栈动作开辟一块独立运行的区域。

方法执行结束时:释放内存,出栈。

6-7 对象数组

数组的元素为对象时,称为对象数组。

调用方法、变量时:

数组名[index].方法/变量

默认初始化中,元素均为null。

6-8 方法的重载

同类中,方法名、标识符、返回值一样,但是参数列表不一样(唯一的不同)

顺序不同也算方法的重载,也算不同。

如何判别:其他的全一样,只有参数列表不一样。

6-9 可变个数形参的使用

当传入方法的参数的类型确定,但是数量不确定时使用可变个数形参。

eg. public int a(int b, String...books);

可变个数形参可以用在同名方法中,彼此构成重载。

可变个数形参只能放到参数列表的最后。

一个方法只能声明一个可变个数参数形参。

实际上是用了一个数组来存储着几个形参。

6-10 方法的值传递机制

形参与实参:

形参:定义方法时括号内的。

实参:调用方法时括号内容。

传递方法:值传递(只传递值过去,也就是复制)

6-11 递归方法(难点)

自己调用自己。或者几个方法循环调用。

容易造成栈溢出。(一直在入栈而没有出栈)

6-12 关键字package与import

package:包,指明文件中定义的类、接口等结构所在的包

主要用来写明该代码所在的位置,有助于工程构建

package 顶层包名.子包名;

一个包里面一般有很多java文件(相当于一个集合)

一个源文件只有一个package语句,只能在第一条出现,如果没有则认为是无名包

取名时不要用java.xx

JDK常见的包:java.lang核心类,java.net网络操作,java.io输入输出类,java.util实用工具,java.sql数据库编程

import:为了定义其他包下的类所使用的引入

import 包名.类名;

a.*表示导入所有结构

java.lang会默认导入不用重复写

如果使用不同包的同名类则需要用全类名分清楚(从顶层包开始都要标出)

6-13 面向对象的特征之一:封装性

面向对象开发原则:高内聚,低耦合

封装性:把物体抽象成概念的类,把需要隐藏的内容隐藏,需要暴露的内容暴露(理解)

如何实现?使用权限修饰符。

包括:private、protected、缺省/default、public

每个的访问范围都不同:

privateprotected缺省public
本类内部
同包下×
其他包下的子类××
其他包下的非子类×××

这些也就是封装性的体现

但是修饰类的时候只有public或者缺省,修饰成员变量、方法、构造器、内部类时四种都有

成员变量/属性私有化:用get/set方法

变量设置为私密的,get、set设置为公开的(提供getXXX/setXXX方法)

让用户按要求进行获取与修改变量而不是直接更改。

私有化方法:直接用private

6-14 权限修饰符的使用

如上。

6-15 类的成员之三:构造器

(构造方法)

new完对象时进行,可以直接进行赋值。

构造器格式:

[修饰符] class 类名{

        [修饰符] 构造器名(){}

        [修饰符] 构造器名(){}

}

构造器名必须与类名相同,无返回值

没有显式构造器时(人为写构造器),会自动创建一个无参空构造器,权限修饰符与类的相同。

如果自己写了构造器则不提供(可以写一个空的加一个自己需要的,写两个构造器)

6-16 属性赋值过程、JavaBean与UML

类创建过程属性赋值顺序:

默认初始化 -> 显式初始化 -> 构造器中初始化 -> 通过属性/方法外部赋值

JavaBean是一个标准的java类(类似模版)

要求:为public,有无参的公共构造器,有属性与对应get、set方法

UML:统一建模语言,描述软件模型与架构的图形语言。

通常看这个图形语言来写代码。

+表示public、-表示private、#表示protected

斜体表示抽象方法或类

方法的写法:方法类型(+、-) 方法名(参数名:参数类型):返回值类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值