进阶篇开始
首先是static:他叫静态,可以修饰成员变量、成员方法。
1.成员变量按照有无stactic修饰分为类变量和实例变量。
(1)类变量有static修饰,在计算机中只有一份,会被类的全部对象共享
(2)实例对象,无static修饰,属于每个对象的。
public class test {
static String name;//类变量
int age;//实例变量
}
类变量可以通过类名(推荐)和对象(不推荐)进行访问。而实例变量只能通过对象访问。
public class test1 {
public static void main(String[] args) {
test.name = "lzk";// 类名.类变量(推荐)
test t = new test();
t.name = "lzk";//对象.类变量(不推荐)
}
}
public class test1 {
public static void main(String[] args) {
test.name = "lzk";// 类名.类变量(推荐)
test t = new test();
t.name = "lzk";//对象.类变量(不推荐)
test t1 = new test();
t1.name = "lzk1";
System.out.println(t1.name);//输出lzk1,因为name是共享的。
}
}
应用场景:类变量用于共享,并且只需要一个就行。
2.成员对象的分类
(1)类方法,有static修饰,属于类
public static class test{
}
(2)实例方法,无static修饰,属于对象。
public void test{
}
原理大致和上面相似。
应用场景:类方法,做工具类,提高复用性,供给开发人员共同分使用,方便调用。
实例方法做工具类的话,需要创建对象,而创建对象需要占用大量内存,会导致浪费。
3.使用类方法、实例方法的注意事项
(1)类方法可以直接访问类的成员,不可以直接访问实例成员
public class test {
static String name;//类变量
int age;//实例变量
public static void Hello(){
name = "lzk";
age = 18;//报错
}
}
(2)实例方法可以直接访问类成员,也可以直接访问实例成员
public class test {
static String name;//类变量
int age;//实例变量
public static void Hello(){
name = "lzk";
age = 18;//报错
sayHello();//报错
}
public void sayHello(){
name = "lzk";
Hello();//不报错
age = 18;//不报错
}
}
(3)实例方法中可以出现this关键字,类方法中不可以出现this关键字
public class test {
static String name;//类变量
int age;//实例变量
public static void Hello(){
this.name = "lzk";//报错
this.age = 18;//报错
sayHello();//报错
}
public void sayHello(){
this.name = "lzk";
Hello();//不报错
this.age = 18;//不报错
}
}
4.代码块,代码块是类的五大成分之一(成员变量、构造器、方法、代码块、内部类)。
5。单例设计模式(架构师构建框架所使用的,)
设计模式是一个问题的最优解。
单例设计模式:目的:确保一个类只有一个对象,不管调用多少次,对象的地址又是同一个。
(1)定义一个私有构造函数
(2)定义一个类变量记住类的一个对象
(3)定义一个类方法,返回对象
示例:饿汉式单例,在获取对象时,对象已经创建好了。
public class A {
// 2.定义一个类变量记住类的一个对象
private static A a = new A();
// 1.定义一个私有构造函数
private A() {
}
//3.定义一个静态方法,返回类的一个对象
public static A getInstance() {
return a;
}
}
懒汉式单例,在获取对象时,才开始创建对象。
public class B {
private static B b;
private B() {
}
//第一次调用时创建对象,后续只会返回第一次的对象
public static B getInstance() {
if (b == null) {
b = new B();
}
return b;
}
}