1.static关键字的使用
(1)静态变量
public class static1 { String name; int age; static String city="乌克兰";//静态变量 static1(String n,int a){ name=n; age=a; } String talk(){ return "我是"+name+"今年"+age+"岁"+city+"人"; } }
public class static11 { public static void main(String[] args) { static1 s1=new static1("lady",18); static1 s2=new static1("lady2",18); System.out.println(s1.talk()); System.out.println(s2.talk()); //修改国家后 static1.city="中国"; System.out.println(s1.talk()); System.out.println(s2.talk()); } }
计算类产生了多少个对象
public class static1 { String name; int age; static String city="乌克兰";//静态变量 static int count=0; static1(){ count++;//新增一个对象 System.out.println("一共产生了"+count+"对象"); } static1(String n,int a){ this(); name=n; age=a; } String talk(){ return "我是"+name+"今年"+age+"岁"+city+"人"; } }
2.静态方法
使用static类型声明方法时,如果类中声明了一个static类型的属性,则该属性可以在非static类型方法中使用和是static类型方法中使用,但是,static类型的方法调用非static类型的属性,则会报错
public class static1 { String name; int age; private static String city="乌克兰";//静态变量 //静态方法
public static void setCity(String c){ city=c; } static1(String n,int a){ name=n; age=a; } String talk(){ return "我是"+name+"今年"+age+"岁"+city+"人"; } }
public class static11 { public static void main(String[] args) { static1 s1=new static1("lady",18); static1 s2=new static1("lady2",18); System.out.println(s1.talk()); System.out.println(s2.talk()); //修改国家后 static1.setCity("中国"); System.out.println(s1.talk()); System.out.println(s2.talk()); } }
运行结果:
我是lady今年18岁乌克兰人
我是lady2今年18岁乌克兰人
我是lady今年18岁中国人
我是lady2今年18岁中国人
3.静态代码块
一个类可以使用不包含在任何方法中的静态代码块,当类被载入时,静态代码块被执行,且只执行一次,静态代码块经常用来进行类属性的初始化。
public class static2 { static2(){ System.out.println("a"); } //先运行下面的静态代码 static{ System.out.println("b"); } }
public class static22 { static { System.out.println("c"); } public static void main(String[] args) { System.out.println("程序开始执行!"); new static2(); new static2(); } }
运行结果:
c
程序开始执行!
b
a
a
4.构造方法的私有
构造方法用private修饰,则成为了私有
public class static3 { String name; // 私有构造方法,封装 private static3() { name = "lady"; } private static final static3 st = new static3();// 实例化私有构造方法,用final标记,表示不能在重新实例化 public static static3 getSt() { return st; } }
public class static33 { public static void main(String[] args) { static3 st = null;// 声明一个static3的对象,没有实例化 st = static3.getSt();// 调用static3的getSt方法 System.out.println(st.name); } }
运行结果:lady