封装与隐藏
高内聚低耦合
- 高内聚:类的内部操作细节自己完成,不允许外部干扰
- 低耦合:仅对外暴露少量方法用于使用
封装体现
- 在类中,我们通过对象.属性对属性进行操作,但在现实情况中需要对操作进行限制
- 通过对用户设置进行判断或设置私有变量
- 我们将类的属性私有化,通过set方法进行设置,通过get方法获取
- 示例:
public class Test1 {
public static void main(String[] args) {
Person p1=new Person();
p1.name="jack";
p1.setAge(20);
p1.show();
System.out.println(p1.getAge());//20
Person p2=new Person();
p2.name="rose";
p2.setAge(-20);
p2.show();
//name=roseage=0china
}
}
class Person{
String name;
int age;
private String nationality="china";//添加私有权限,外部无法更改
//对设置年龄进行设置必须大于零,不然默认为0
public void setAge(int num){
if(num >= 0){
age=num;
}else {
age=0;
}
}
//获取属性
public int getAge(){
return age;
}
public void show(){
System.out.println("name=" + name +" "+"age"+ age + " " +nationality);
}
}
- 不对外暴露私有方法
- 单例模式
构造器(constructor)
构造作用
- 创建对象 new+构造器
- 初始化对象信息
- 如果没有显示定义类的构造器的话,则系统默认提供一个空参的构造器
- 默认构造器权限与类权限一致
- 一个类中如果有多个构造器,那么构造器之间为重载
- 定义构造器的格式:权限修饰符 类(形参列表){}
public class Test2 {
public static void main(String[] args) {
Person2 p=new Person2();
//constructor
}
}
class Person2{
String name;
public Person2(){
System.out.println("constructor");
}
}
JavaBean
- JavaBean是一种JAVA语言写成的可重用组件
- 特点:
- 类是公共的
- 有一个无参的公共构造器
- 有属性,且有get,set方法
- 用户可以使用JavaBean将功能,处理,值,数据库访问和其他任何可以用JAVA代码创建的对象进行打包,其他开发者可以通过JSP页面,JavaBean,apple程序来访问,也就是说JavaBean提供了复制和黏贴功能
this关键字
- 在方法内部使用,即这个方法所属对象引用
- 在构造器内部使用,表示构造器正在初始化对象
- this在表示当前对象时,可以调用类的属性,方法,构造器
- 也就是在方法内部需要调用该方法的对象时,用this
- 通常this可以省略,但如果出现类和方法形参重名就需要加上
- 示例:
public class Test2 {
public static void main(String[] args) {
Person3 p2=new Person3();
p2.setName("jack");
System.out.println(p2.getName());
//jack
p2.eat();
//做饭 吃饭
}
}
class Person3{
String name;
public void setName(String name){
this.name=name;//这样可以解决name=name指代不明情况
}
public String getName(){
return this.name;
}
public void eat(){
this.cook();//这里在方法里面调用类的方法
System.out.println("吃饭");
}
public void cook(){
System.out.println("做饭");
}
}
- this调用构造器
- 在类的构造器中,可以显示使用this(形参列表),调用本类指定的其他构造器
- 调用应注意在一条调用链上同一个构造器只能出现一次
- 构造器调用时只能出现在首行,并且只能声明一个调用其他构造器
- 示例:
public class Test2 {
public static void main(String[] args) {
//初始化同时向构造器中传参
Person4 p4=new Person4("jack",22);
p4.show();
//name=jackage22
}
}
class Person4{
private String name;
private int age;
public Person4(String name){
this.name=name;//赋值name
}
public Person4(String name,int age){
this(name);//通过this关键字调用构造器
this.age=age;//赋值age
}
public void show(){
System.out.println("name=" + this.name + "age" + this.age);
}
}
package(包)
- 为了更好的实现项目中类的管理,提供包的概念
- 使用package声明类或接口所属的包,声明在源文件首行
- 包属于标识符,遵循标识符命名规则
- 在包中每.一次表示一层文件目录
import(导入)
- 在源文件中显式使用import导入指定包下的接口和类
- 声明在包和类之间可以使用xxx.*表示导入包下所有结构
- java.long包下定义的或本包定义的可以省略import结构
- 如果使用同名类,就在new时用全类名方式
- import static可以导入指定类或接口中的静态结构