static关键字
static修饰变量
创建Person对象
public class Person {
private String name;
private int age;
static String room;//使用static关键字修饰
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age){
this.name=name;
this.age=age;
}
public Person(){
}
}
一旦使用了static关键字,那么这样的内容不再属于对象自己(new出来的),而是属于类,凡是本类的对象,都共享同一份。
这里创建了2个对象,一个有参构造,一个无参构造。在设置room时,只有p1设置,p2没有进行创建,但是输出时,p2.room也存在,并且和p1创建时一样。
public class Static {
public static void main(String[] args) {
Person p1 = new Person("guo",12);
Person p2 = new Person();
p1.room="123";
p1.setAge(1);
p1.setName("sss");
p2.setAge(123);
p2.setName("fang");
System.out.println(p1.getName()+p1.getAge()+"教室"+p1.room);//sss1教室123
System.out.println(p2.getName()+p2.getAge()+"教室"+p2.room);//fang123教室123
p1.room="12313";//这里对room进行修改
System.out.println(p1.getName()+p1.getAge()+"教室"+p1.room);//sss1教室12313
System.out.println(p2.getName()+p2.getAge()+"教室"+p2.room);//fang123教室12313
}
}
static修饰成员方法
/*static修饰成员方法,那么这就成为了静态方法,静态方法不属于对象,而是属于类的
* 如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它
* 静态方法中不能调用非静态方法,变量也不行*/
public class Static1 {
//Static1 st1 = new Static1();//对象创建的位置1
String room;
static int iClass;
public void method(int iClass){
this.iClass = iClass;//this关键字
/* method1();
this.method1();//这两种方式调用静态方法都可以*/
}
public static void method1(){
//st1.method();//静态方法里不能调用非静态的方法
//room = "ss";//变量也不行
me1(1);
//this.me1(1);//
}
public static void me1(int i){
iClass=i;
}
public void method2(){
Static1 st1 = new Static1();//对象创建的位置2,这俩个地方都可以
st1.method(2);
method1();//大概就是这个意思,
}
public void printClass(){
System.out.println(iClass);
}
}
静态代码块
静态代码块的格式
public class 类名称{
static{
//静态代码块的内容
}
}
特点:当第一次用到本类时,静态代码块执行唯一的一次。
典型用途:用来一次性的对静态成员变量进行赋值
public class Static2 {
public static void main(String[] args) {
Static2 st1 = new Static2();
st1.print();//null
}
static String room;
static {
String room = "hao";
System.out.println("静态代码块执行");
System.out.println(room);//hao
}
public Static2(){
System.out.println("构造方法");
}
public void print(){
System.out.println(room);
}
}
*static修饰成员方法,那么这就成为了静态方法,静态方法不属于对象,而是属于类的
* 如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它
*
* 静态方法中不能用this关键字
public class Static1Test {
public static void main(String[] args) {
Static1 st2 = new Static1();
st2.method(2);
st2.method1();//也没错,但是不推荐
Static1.method1();
//method3();
System.out.println();
Static1 st3 = new Static1() ;
st3.printClass();
}
public void method3(){
}
}