文章目录
前言
不管学什么都可以按3w: what? why? how?:首页学习的这个技术是什么? 为什么要出现这个技术? 如何使用这个技术?
一、封装
封装就是将类的属性私有化,提供公有的方法访问私有属性
不对外暴露打的私有的方法
单例模式
1、好处:
1.只能通过规定的方法来访问数据
2.隐藏类的实例细节,方便修改和实现
2、使用
1.属性私有化private
2.创建setter和getter方法用于属性的读写
3.setter和getter方法加入属性控制语句,用于对属性的合法值进行判断
二、四种权限修饰符
封装性需要权限修饰符
1、priavte、 缺省default、protected、public
2、修饰 类及类的内部结构:属性、方法、内部类、构造器
修饰类只能用缺省default和public
总结
Java提供了四种权限修饰符来修饰类及类的内部结构、体现了类及类部结构的可见性大小
三、构造器
1、作用
1、创建对象 new + 构造器 new Person()
2、初始化对象的信息
3、一个内中定义的多个构造器构成重载
4、显示的定义了类的构造器、系统不会提供默认的空参构造器
5、一个类中至少存在一个构造器
2、说明
如果没有显示的定义构造器。系统默认提供一个空参的构造器
定义构造器: 权限修饰符 类名(形参列表){}
public Person(){}
3、属性赋值的过程
属性赋值的先后顺序
① 默认初始化
public class Person {
//属性或成员变量
String pName;//默认null
}
② 显示初始化 和 ⑤在代码块中赋值
public class Person {
//属性或成员变量 显示初始化值
int age=1;
}
③ 构造器中赋值或初始化
④ 通过对象 . 方法 或者 对象 . 属性单点方式赋值
以上的操作先后顺序:① (②和⑤) ③ ④
四 、JavaBean的使用
JavaBean符合以下标准:
1、类是公共的
2、有一个无参的公共构造器
3、有属性、并且有对应的get、set方法
五、UML类图
六 、Java关键字
1、this说明
this关键字: 哪个对象调用了this所在的函数,this就代表哪个对象
== this.属性或方法调用当前的属性或方法 封装对象的属性时经常会使用this==
2 、this可以用来修饰属性、方法
this修饰属性和方法
public String getName() {
//this.方法
this.study();
//this.属性
return this.name;
}
① 在类的方法中 可以使用this.属性或者this.方法的方式 调用当前对象的属性或方法,通常选择省略this.
特殊情况方法形参和类属性同名我们使用this.变量的方式表明此变量是属性 而不是形参
② 在类的构造器中 可以使用this.属性或者this.方法的方式 调用当前正在创建的对象属性或方法,通常选择省略this.
特殊情况构造器的形参和类属性同名我们使用this.变量的方式表明此变量是属性 而不是形参
3、 this调用构造器
如何在构造器中调用另一个构造器?
this();调用空参构造器
this(age);this调用带参构造器
1、我们在类的构造器中显示的使用this(形参列表)调用本类中的其它构造器
2、构造器中不能通过this(形参列表)调用自己
3、如果一个类中有n个构造器,最多有n-1使用了this(参数列表),如果最后一个构造器调用了其它构造器会一直循环形成不了闭环
4、规定:this(形参)必须在首行
5、构造器内部,最多只能声明一个this(形参列表)方式调用其它构造器
以上HashMap源码中this(形参列表)调用其它构造器可以降低代码冗余
4、 package关键字
1、项目中类的管理、类在包下
2、使用package声明类或接口所属的包,声明在源文件首行
3、包属于标识符,符合标识符命名规范
4、点的结构,点一次代表一层文件目录
补充:同一个包下不能同名接口或类。不同的包下可以命名同名的接口或者类
5、 import关键字
1、在源文件中显示的导入指定包下的类和接口
2、声明在包和类的声明之间
3、如果多个包并列写入即可
4、可以使用xxx.*的方式表示这个包下所有结构
5、java.lang下的包可以省略导入
6、本包下的类或者接口不用导入
7、不同包下的同名类,至少一个类全类名显示导入
8、import static:导入指定类或者接口中的静态结构
6、 super关键字
1、super 为父类的
2、super可以用来调用:属性、 方法、 构造器
3、使用:
属性:
在子类的方法或者构造器中属于super.属性或super.方法的方式调用父类的属性方法。但是通常习惯省略super.
在子父类中出现两个同名的属性,在子类中调用父类的属性,用this和super区分调用的哪个属性
方法:
当子类重写了父类的方法以后,在子类的方法中调用父类中被重写的方法时,用super.方法是父类的方法
构造器:
在子类的构造器中显示的使用super(形参列表)的方式调用父类中声明的指定的构造器
super(形参列表)的方式使用必须声明在子类构造器中的首行
在类的构造器中针对于this(形参列表)或super(形参列表)只能在本类的构造器调用(this)和父类的构造器调用(supper)二选一 如果没有写一般默认super()空参构造器
在类的多个构造器中,至少有一个类的构造器中使用了super(形参列表),调用父类中的构造器
7、 instanceof
@Test
public void test1() {
//obj instance class obj是引用对象 class是类或者接口
//obj是class的实例对象
//obj是class的直接子类或者间接子类
//obj是class接口的实现类
Animal animal = new Cat();
//obj instance class obj是引用对象 class是类或者接口
if(animal instanceof Animal){
System.out.println("obj是class的实例对象");
}
//Dog dog = (Dog) animal;
if(animal instanceof Cat){
Cat cat = (Cat) animal;
System.out.println("obj是class的直接子类或者间接子类");
}
ArrayList arrayList = new ArrayList();
if (arrayList instanceof List) {
System.out.println("obj是class接口的实现类");
}
}
8、 static
static可以修饰:属性、方法、代码块、内部类
什么时候使用static
属性是可以被多个对象共享的,不会随着对象的不同而不同。比如银行利率属性
操作静态属性的方法为静态方法 通常工具类的方法为静态方法
static的特点:
1,static是一个修饰符,用于修饰成员。
2,static修饰的成员被所有的对象所共享。
3,static优先于对象存在,因为static的成员随着类的加载就已经存在了。
4,static修饰的成员多了一种调用方式,就可以直接被类名所调用 。 类名.静态成员 。
5,static修饰的数据是共享数据,对象中的存储的是特有数据。
成员变量和静态变量的区别?
1,两个变量的生命周期不同。
成员变量随着对象的创建而存在,随着对象的被回收而释放。
静态变量随着类的加载而存在,随着类的消失而消失。
2,调用方式不同。
成员变量只能被对象调用。
静态变量可以被对象调用,还可以被类名调用。
3,别名不同。
成员变量也称为实例变量。
静态变量称为类变量。
4,数据存储位置不同。
成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据.
静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据.
类变量(静态变量)与实例变量(成员变量)的内存解析
静态使用的注意事项:
1,静态方法只能访问静态成员。(非静态既可以访问静态,又可以访问非静态)
2,静态方法中不可以使用this或者super关键字。
3,主函数是静态的。
初始化块
静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
代码块
1,局部代码快对局部变量的生周期进行控制 2,构造代码块对所有对象进行初始化。
3,静态代码块。对类进行初始化。