封装是Java的三大特性之一
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
封装的原则
1.将属性隐藏起来 使用private 关键字来修饰属性,私有的,私有化的,被private修饰的内容,只能在本类中使用,可以用来修饰属性和方法。
2.对外提供公共的访问方法(赋值,取值),提供getter和setter方法来操作隐藏的属性。
实现封装的步骤
1:私有化属性;
2:创建公共的getter和setter方法;
3:在setter方法中添加公共语句
private 关键字说明
被private修饰的属性和方法只能在本类中使用,其他类不能直接访问。
封装的好处
1.隐藏了实现的细节,提高安全性
2.符合Java的"高内聚,低耦合"思想
3.提高了软件的独立性和可重用性
包的介绍
作用:
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: 所修饰的类、变量、方法,在任何地方均具有访问权限;
- protected: 这种权限是为继承而设计的,protected所修饰的成员,对所有子类是可访问的,但只对同包的类是可访问的,对外包的非子类是不可以访问;
- 包访问权限(default): 只对同包的类具有访问的权限,外包的所有类都不能访
- private: 私有的权限,只对本类的方法可以使用;其他地方均不能访问
static修饰符
static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,他不依赖类的实列,被类的所有实列对象共享。
static修饰的成员变量和成员方法习惯上成为静态变量和静态方法,static修饰的代码块表示静态代码块。
static代码块
static代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,他不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果Static代码块有多个,JVM将按照他们在类中出现的先后顺序依次执行他们,每个静态代码块只会被执行一次。
静态代码块执行的时机:
静态代码块在对象创建之前执行,每创建一个对象都会执行一次构造方法。而每个静态代码块只会被执行一次。第一次创建对象之前。
static变量,静态变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;
另一种是没有被static修饰的变量,叫实列变量。实列变量必须通过对象来调用。
静态变量特点:
1.被static修饰的变量叫静态变量,非静态变量叫实列变量
2.在内存中只有一个,在加载类的时候创建,被所有方法和对象共享
3.其他类中,可以直接通过类名访问(可以通过类名直接调用)
static方法,静态方法
静态方法就是被static修饰的方法,没有被static修饰的方法叫实列方法,实列方法必须要对象才可以调用
静态方法可以直接通过类名调用,任何的实列也都可以调用
静态方法特点
1.静态方法中不能使用this和super,this当前对象
2.不能直接访问所属类的实列变量和实列方法, 面试题,静态方法能不能访问非静态资源? 可以的
3.可直接访问类的静态变量和静态方法,静态能够调用静态资源,不能直接调用非静态资源
4.可直接通过类名.方法名访问
5.规定:静态只能调用静态,非静态只能调用非静态
面试题:静态方法能不能调用非静态方法?
静态方法能不能直接调用非静态方法?
类的成员变量包括
类变量(静态变量)
1.被static修饰的变量
2.在内存中只有一个拷贝
3.类内部,可在任何方法内直接访问静态变量
4.其他类中,可以直接通过类名访问
实列变量
没有被static修饰的变量
每创建一个实列,就会为实列变量分配一个内存,实列变量可以在内存中有多个拷贝,互不影响
必须要通过对象来调用
初始化:
静态变量在创建对象之前会被加载
实例变量,随着对象的创建而创建
案列1
//使用封装实现电子宠物系统的企鹅类正确输入健康值和亲密度healthy,lovely,name,sex
//保证健康值的有效性(0~100),否则取默认值60
//保证亲密度的有效性(0~100),否则取默认值60
测试类
案列2
需求说明
//模拟实现选民投票过程:一群选民进行投票,每个选民只允许投一次票,并且当投票总数达到100时,就停止投票
//唯一的一个变量来统计总数-静态变量写一个选民类-投票的方法-定义一个计数器投票方法的时候打印目前总票数,达到100了,就不能在进行投票了
测试类