1:封装
1.1:封装的概念
封装是java的三大特性之一
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
1.2:封装的原则
1:将属性隐藏起来 - 使用private关键字来修饰属性,私有的,私有化的
2:对外提供公共的访问方法(赋值,取值), 提供getter,setter 方法来操作隐藏的属性
1.3:实现封装的步骤 - 记住
1:私有化属性;使用private关键字来修饰属性即可。
2:创建公共的getter和setter方法;
3:在setter方法中添加控制语句,对参数进行合理化的判断
private 关键字说明:
被private修饰的属性和方法只能在本类中方法,其他类不能直接访问.
1.4:封装的好处 - 记住
1、隐藏了实现的细节,提高安全性
2、符合java的“高内聚,低耦合”思想
3、提高了软件的独立性和可重用性
2:包的介绍
作用:
1、文档分门别类,易于查找和管理;
2、解决文件同名冲突问题;
3、有助于实施访问权限管理;
包:package,需要放在java源代码中的第一条语句;以分号结尾。
类似于windows中的文件夹,
包的命名规则:
1、包名由小写字母组成,不能以圆点开头或结尾;
2、包名之前最好加上唯一的前缀,通常是组织倒置的域名;
包的创建方式:
- 分别创建包和类
- 创建类的同时创建包
包的导入:
如果需要使用其他包下面的类,可以使用import 关键字导入
导入规则:import 包名.类名
如:
import java.util.Scanner; 导入scanner类
import java.util.*; * 表示所有的类,导入java.util包下的所有类
注意:
- 一个类同时引用了两个来自不同包的同名类,必须通过完整类名来区分
- package和import的顺序是固定的
package必须位于第一行(忽略注释行);
只允许有一个package语句;
其次是import;
接着是类的声明;
3:访问权限控制
Java 中一共有四种访问权限控制,其权限控制的大小情况是这样的:public > protected > default(包访问权限) > private ,
具体的权限控制看下面表格
- public: 所修饰的类、变量、方法,在任何地方均具有访问权限;
2、protected: 这种权限是为继承而设计的,protected所修饰的成员,对所有子类是可访问的,但只对同包的类是可访问的,对外包的非子类是不可以访问;
3、包访问权限(default): 只对同包的类具有访问的权限,外包的所有类都不能访问;
4、private: 私有的权限,只对本类的方法可以使用;其他地方均不能访问
4:static修饰符
static表示“全局”或者“静态”的意思,用来修饰成员变量(属性)和成员方法(方法),也可以形成静态static代码块;
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类的实例,被类的所有实例对象共享;
static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,static修饰的代码块表示静态代码块,
static代码块
static 代码块,是在类中独立于类成员的 static 语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM 加载类时会执行这些静态的代码块,如果 static 代码块有多个,JVM 将按照它们在类中出现的先后顺序依次执行它们,每个静态代码块只会被执行一次。
静态代码块执行的时机:
静态代码块在对象创建之前执行,每创建一个对象都会执行一次构造方法。而每个静态代码块只会被执行一次。第一次创建对象之前
static变量,静态变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;
另一种是没有被static修饰的变量,叫实例变量。实例变量必须通过对象来调用。
静态变量特点:
1、被static修饰的变量
2、在内存中只有一个,在加载类的时候创建,被所有方法和对象共享
3、其他类中,可以直接通过类名访问
static方法,静态方法
静态方法就是被static修饰的方法,没有被static修饰的方法称为实例方法,实例方法必须要对象才可以调用,
静态方法可以直接通过类名调用,任何的实例也都可以调用
静态方法特点:
- 静态方法中不能使用this和super,this当前对象
- 不能直接访问所属类的实例变量和实例方法 , 面试题,静态方法能不能访问非静态资源? - 可以的
- 可直接访问类的静态变量和静态方法,静态能够调用静态资源,不能调用非静态资源
- 可直接通过类名.方法名访问
- 规定:静态只能调用静态,非静态只能调用非静态
面试题:静态方法能不能调用非静态方法?
静态方法能不能直接调用非静态的方法?
静态变量和实例变量的比较: - 记住
5:继承
在《Think in java》中有这样一句话:复用代码是Java众多引人注目的功能之一。但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情。在这句话中最引人注目的是“复用代码”,尽可能的复用代码是我们程序员一直在追求的,现在我来介绍一种复用代码的方式,也是java三大特性之一---继承
5.1:什么是继承
继承顾名思义,继任,承接,传承的意思。那么我们先来看看生活中的继承关系有哪些?最常见的:父母子女;汽车,电动车,自行车和车。无论哪种车,都有具备车的特性。再比如说:家里面的电饭锅,电磁炉,电冰箱。他们都属于电器类,都具有名字这个属性,也都需要用电这个方法。如果在程序中我们一个个类去把这些重复的代码都写上去,那不是浪费时间和精力吗?我们能够从一个个对象中抽象出来一个类。那么我们也应该能够从具有包含关系的一个个类中抽象出一个具有共同属性和方法的新类,也就是父类。Java中的继承使用的是extends关键字,继承的类叫做子类(扩展类),被继承的类叫做父类(超类或者基类)。凡是这种可以有包含关系的类都能实现继承关系。
5.2:继承中的术语和注意事项
1、类:类是具有共同属性和行为的一组对象。它是创建对象的模板或蓝图。
2、子类:子类是继承其他类的类。它也称为派生类,扩展类或子类。
3、超类/父类:超类是子类继承功能的类。它也称为基类或父类。-通用的属性和方法
4、可重用性:正如名称所指定的那样,可重用性是一种机制,可以帮助您在创建新类时重用现有类的属性和方法。
5、Java中只支持单继承,即一个类只能有一个直接父类
5.3:使用继承
- 编写父类,创建公共的属性和方法
- 编写子类使用extends继承父类
- 编写子类中特有的属性和方法
注意:
- super关键字代表父类,只能出现在子类的方法和构造方法中
- 在子类构造方法中使用super调用父类构造方法,必须位于第一句;
- 子类不可以直接访问父类中定义为private的属性和方法 - private的东西是不能被继承的。
子类到底继承了父类哪些内容!!
继承了public, protected 修饰的属性和方法
如果子类和父类在同一个包下的话,还继承了默认修饰符修饰的内容
子类不能继承父类的情况:
- private修饰的属性和方法
- 子类和父类不再同一个包下,不能继承默认访问权限的成员
- 不能继承构造方法
5.4:什么时候使用继承
符合 is a 关系的设计时,可以考虑使用继承。
小狗是一个宠物,小猫是一个宠物
5.5:继承的优点
将子类共有的属性和方法抽取到父类中,减少重复代码,实现代码的重用