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(){

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值