今天内容:
1.封装
2.static关键字
3.继承
1.封装(重点)
基本概念:
通常情况下测试类中\可以对封装类中的成员的变量进行赋值,若赋值的数据合法但不合理时,无论是编译阶段还是运行阶段都不会报错或给出提示.
为了避免以上错误的发生,就需要对成员变量进行密封包装处理,该机制就叫做封装,换句话说封装就是一种保证成员变量值合理性的机制就叫做封装
封装步骤:
1.私有化成员变量,使用private关键字修饰
private修饰成员变量表示私有的含义,该成员变量只能在本类的内部使用
2.提供公有的get和set方法并在方法体中进行合理值的判断并利用get方法写出show的打印方法
public修饰成员方法表示公有的,表示该方法可以在任何地方调用,若方法的前面啥也不加表示默认权限,访问级别低于public
例子:在设置价格的方法中进行判断价格格式是否合理
void setperice(int perice){
if(perice>0){
this.perice=perice;
}else{
System.out.println("价格不合理");
}
}
3.在构造方法中调用set方法进行合理值判断
例子:让有参构造方法调用定义好格式判断的set方法进行格式约束
Person(String brand,String color,int perice){
setBrand(brand);
setColor(color);
setperice(perice);
}
!!!!!!!!!!!!没有特殊要求,就在成员方法前用public修饰
2.static关键字:
通常情况下成员变量隶属于对象层级,每创建一个对象就需要申请独立的内存空间,来存放该对象独立的成员变量信息,若所有对象的某个成员变量数值完全一样却又单独存放会造成内存空间的浪费.
为了解决上述问题,则使用static关键字修饰成员变量表达静态的含义,此时该成员变量由对象层级提升为类层级,被所有对象共享,该成员变量随着类的加载准备就绪,与是否创建对象无关.
static关键字也可以修饰成员方法,推荐使用 类名.成员变量名 的访问方式.
例子:就是在声明成员变量时,在前面使用static关键字修饰
static 成员变量类型 成员变量名;
!!!!!!使用static关键字后,因为所有对象共享一个区域,所以一个对象修改了成员变量的值后所有调用这个成员变量的值都会被修改.并且在static修饰后 ,可以直接用:类名.成员变量的方式获取
!!!!!!!!!!!!!!!!!!!!对象层级的成员方法和成员变量要用对象名.或引用名.的方式引用
!!!!!!!!!!!!!!!!!!!!类层级的成员方法和成员变量要用类.的方式引用
使用方法:
1.在非静态的成员方法中既能访问静态的成员又能访问非静态的成员;
(成员: 成员变量+成员方法, 静态成员被所有对象共享)
2.在静态的成员方法中,只能访问静态的成员变量不能访问非静态的成员变量
(成员: 成员变量+成员方法, 调用静态方法时可能还没有创建对象,非静态的成员只有在创建对象时候才会生效,所以静态方法不能访问非静态变量,非静态变量只能用对象.的方式调用)
3.非静态的方法可以直接调用静态的属性和方法
4.只有隶属于类被所有对象共享的属性能加static负责不能随便加
(不能滥用static关键字)
单例类
自我领悟:
1.将构造方法私有化,这样在类外边就不能再实例化对象了
2.将所有的成员方法和成员变量都私有化并升级到类层级,让其使用类名.调用
3.对外提供一个get方法,把唯一的对象传出去
4.在外边可以声明变量,语法格式:类名.变量名
5.将get方法赋给变量就是 语法格式:类名.变量名=new的对象名.get()
6.这样就可以使用来了
基本概念:
在某个特殊场合中一个类只对外提供一个对象,这种类被称为单例类
单例模式的思路:
1.先private构造,阻止外部去创建对象
2.本类提供一个对象,定义一个private static的本类类型属性
3.对外提供一个get方法,把唯一的对象传出去
实现方式:
单例设计模式的实现方式分为两种:
代码一上来就new了一个对象
饿汉式:
编程实现Person类要求在main方法中能得到且只能得到Person的一个对象
public class Person{
//2.提供本类类型的引用指向本类类型的对象
private static Person p1 = new Person();
//1.为了让只能引用一个对象要讲构造方法私有化,私有化后只能在本类的内部用
//3.提供公有的get方法负责将成员变量返回出去
public static Person get(){
return p1;
}
public static void main(String[] agrs){
Person pp=Person.get();
Person pp1=Person.get();
Person ppp=new Person();
System.out.print(pp==pp1);
}
}
懒汉式:
public class Person{
private static Person p1 =null;
public static Person get(){
if(p1==null){
p1=new Person();
}
return p1;
}
public static void main(String[] agrs){
Person pp=Person.get();
Person pp1=Person.get();
System.out.print(pp==pp1);
}
}
继承
基本概念:
当多个类之间有相同的特征或行为时,可以将相同的内容提取出来组成一个公共类,让多个类吸收公共类中已有的特征和行为而在多个类的内部编写自己独有特征和行为的方式我们就叫做继承,使用继承可以减少代码的重复性和扩展性和可维护性.
使用方法:
在java语言中使用extends(扩展)关键字来表达继承关系
如:
public class student extends person{} 表示student类继承自person类
其中person类叫做基类,父类,超类
其中student类叫做派生类,子类,孩子类