JAVA封装
封装
- 将类的某些信息隐藏在类的内部,不允许外部程序直接访问
通过该类提供的方法来实现对隐藏信息的操作和访问 - 隐藏对象的信息
- 留出访问的接口
例子:ATM机 - 特点:
-1、只能通过规定的方法访问数据
-2、隐藏类的实例细节,方便修改和实现
无论封装的内部发生什么变化,只要对外接口不发生变化,那么对外就无影响
JAVA实现封装
-
修改属性的可见性(访问修饰符设为private)
-
创建getter/setter方法(设为public用于属性的读写)
这个就相当于给的对外接口 -
在getter/setter方法中加入属性控制语句(对属性值的合法进行判断)
作用:排除逻辑隐患- 只有getter方法的属性为只读属性
getter方法有返回值 - 只有setter方法的属性为只写属性
- 只有getter方法的属性为只读属性
包
1、JAVA中一个包里不能存在同名类
2、包的命名:域名倒序+模块+功能
3、域名全部小写
4、包名:必须放在JAVA源文件中的第一行
5、建议每个包内存储信息功能单一
1、import 包名.; 加载对应包下所有的类 import 包名.类名; 加载对应包下指定的类
建议采用加载指定类的方式,提高加载效率
2、在程序中直接写名相应包名来调用,如com.imooc.animal.CatTest tex=new com.imooc.animal.CatTest();
3、导入的包涵盖多个类名相同的类时,会优先调用能够直接解析到的类
4、通过import 包名.; 的方式加载时,只能加载到该包下面直接的类
package和import的使用
- 打包–package
包名一般为小写,而类名的第一个字母一般为大写,这样在引用时,可以明显的分辨出包名和类名。如果在类的定义之前没有使用package定义包名,那么该类就属于缺省的包。 - 包的作用
可以更好的组织类,包与文件夹类似,文件夹可以将不同的文件放在同一个文件夹中,而包也可以将不同的类文件放在同一包中。减少类名的冲突问题,这也与文件夹类似,同一文件夹中的文件不能重名,不同文件中的文件可以重名,同一包中的类名不能重复,不同包中的类名可以重复。对包中的类起了一定的保护作用,详见Java的访问控制(在后面的课程中会详细讲解~~)。 - 包的使用
使用package关键字指明类所在的包。package语句必须在文件的最前面。编译时可使用javac –d . Test.java自动产生包需要目录。可以使用java testPackage.Test来执行编译后的代码。 - 导入–import
使用了包机制后,如果在一个类中使用了其他包中的类,需要使用import来引入。 - import的使用
直接引用指定的类,如import java.util.Vector。
引用一个包中的多个类,如import java.awt.。号代替类名,但不能代替包名,如import java.awt.,只引用java.awt下的类,而不引用java.awt下的子包里面的类。import java.awt.F,这种使用方法是错误的。import语句在所有类定义之前,在package定义之后。import只告诉编译器及解释器哪里可以找到类、变量、方法的定义,而并没有将这些定义引入代码中。 - 包中类的使用
如果要使用的类是属于java.lang包的,那么可以直接使用类名来引用指定的类,而不需要加上包名,因为包java.lang不用显示使用import,它是缺省引入的。
如果要使用的类在其它包(java.lang除外)中,那么可以通过包名加上类名来引用该类,如java.awt.Font。对于经常要使用的类(该类在其它包中),那么最好使用import引用指定的包,如java.awt.*。如果import引入的不同的包中包含有相同的类名,那么这些类的使用必须加上包名。
常用的系统包
- java.lang
包含Java语言基础的类,该包系统加载时默认导入
如:System、String、Math - java.util
包含Java语言中常用工具
如:Scanner、Random - java.io
包含输入、输出相关功能的类
如:File、InputStream
static 关键字
定义方法: 访问修饰符 static 类型说明符 变量名字;
访问方法:可以使用两种方法。
①、对象名.静态属性名;(使用这种方式编译器会警告,但不会报错)
②、类名.静态属性名;
特性:
1、在类中定义后,无论这个类实例化多少个对象,用static 修饰的成员属性,都会使用同一片内存空间,改变一个static属性的值,其他的都会改变
2、static属性随着,所有实例化的对象销毁后才销毁,和普通属性:随着他所属对象一起销毁。不同
- static + 属性
静态属性、类属性,调用方式:类.静态属性 - static + 方法
静态方法、类方法,调用方式:类.静态方法 - static不能用来修饰class(没有静态的类)
- 方法内的局部变量不能添加static修饰符
- 成员方法中可以直接访问类的静态成员;静态方法中不能直接访问非静态成员,只能直接调用静态成员(包括属性和方法),或者通过对象实例化后,以对象.成员的方式进行调用;静态方法中不能使用this
代码块{}
- 在语句中出现大括号就叫代码块{}
- 大括号出现在方法里叫普通代码块(是顺序执行,先出现,先执行)
- 大括号直接在类中定义叫构造代码块(在对象创建时被调用,优先于构造方法执行,多个构造代码块顺序执行;)
- 在构造代码块前加static,叫做静态代码块(类加载时调用,优先于构造代码块执行,多个静态代码块顺序执行;)
- 无论产生多少类实例,静态代码块只执行一次。
在一个方法体中,
如果定义了方法的一个局部变量temp
那么在其中的普通代码块,则不允许重复定义同名变量
其中存在一个作用范围的问题,在一个变量的作用范围内,不允许出现重复定义的,
这和类成员变量与方法局部变量不同