第三节 面向对象进阶
一、封装(一般是private)
1)概述:
封装的意义:保护或防止 代码/数据 被无意中 破坏/修改
保护成员属性,不让类以外的程序直接访问或修改
2)封装原则:
隐藏对象的属性和实现细节,仅对外公开访问方法,并且控制访问级别
在开发中,为了避免逻辑错误(比如:年龄为-100),建议对所有属性进行封装,并提供setter和getter方法进行设置和获取操作
二、this
在Java基础中,this关键字是最重要的概念,使用它可以完成以下操作:
- 调用类中的属性
- 调用类中的方法或构造方法
在一个构造方法中,调用另一个构造方法时,调用的代码必须写在当前构造方法的第一行。
- 表示当前对象
注意:小心互相调用导致的死循环 (A中调用B,B中调用C,C中调用A)
三、static
1)概述:
static表示”静态”的意思,可以用来修饰成员变量和成员方法(后续还会学习 静态代码块 和 静态内部类)。
static的主要作用在于创建独立于具体对象的域变量或者方法(什么是域变量?)
简单理解:
被static关键字修饰的方法或者变量不需要依赖于对象进行访问,只要类被加载到内存(早于对象的创建,只有加载后才能创建对象)了,就可以通过类名去进行访问。
并且不会因为对象的多次创建,而在内存中建立多份数据
2)重点:
1. 静态成员 在类加载时加载并初始化
2. 无论一个类存在多少个对象,静态的属性,永远在内存中只有一份(可以理解为所有对象公用)
3. 在访问时:静态不能访问非静态,非静态可以访问静态!(因为静态可能会早于非静态被使用,但是非静态可以使用时,说明对象已经存在,则可以访问静态资源)
四、包
1)概述
1. 把功能相似或相关的类或接口,组织在同一个包中,方便类的查找和使用
2. 包如同文件夹,不同包中,类的名字可以相同。当同时访问不同包中的相同名称的类时,应加上包名称加以区分。因此,包可以避免名字冲突。
3. 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
2)使用规则
1. 包中,java文件的定义:
.java文件的首部,必须编写类属于哪个包,格式:
不建议使用默认包(default package),有些操作用不了
2. 包名的定义 :
通常由多个单词组成,所有单词小写,单词与单词之间用“.”隔开,一般命名为“com.公司名.项目名.模块名…”
(规范来源:互联网中的域名不会重复)
3)import关键字
格式:import 包名.类名;
4)注意事项
五、权限修饰符
使用权限修饰符,相当于给资源添加访问限制。
封装(private)是权限修饰符中的一种。(用的多,因为封装的更极致,更合理)
子类涉及继承问题。
public用的也多,便于跨包操作
六、代码块
1)普通代码块(存储代码的区域,比如{})
顺序执行的流程中的代码块,作用:分区
2)构造代码块
类中的成员代码块;每次对象创建时执行,执行在构造方法之前
3)静态代码块
类中使用static修饰的成员代码块;类加载到内存时执行。每次程序启动到关闭,只执行一次的代码块。
4)同步代码块
在后续多线程技术中学习
常见面试题:构造方法、构造代码块、静态代码块的执行循序:
静态代码块 - > 构造代码快 - > 构造方法
执行效果:(静态代码块只会执行一次,类加载时;构造代码快每次对象创建时执行一次)
七、main方法详解
JVM承认的唯一的程序的入口
public static void main(String[] args)
各参数含义:1. Public:表示公共的内容,可以被所有操作所调用
2. static:表示方法是静态的,可以由类名直接调用。
3. void:没有任何的返回值操作
4. main:系统规定的方法名称,拼错报错(NoSuchMethodError: main)
5. String[] args:字符串数组,接收参数的
所有参数在执行类的时候以空格分隔
Eg:java Demo1 1 2 3 4 5 …
注意:如果要输入的参数带有空格:”hello world”,那么需要””括起来:
Eg:java Demo1 “hello world” “hello jdk” “hello jvm”