static 关键字

1. static 定义属性

static 修饰的属性保存在全局数据区,而非static修饰的属性保存在堆内存区。

知识点:内存区共有四个,分别是栈内存,堆内存,全局数据区,全局代码区。

class Book {

 static pub ="北京大学出版社";//static 修饰属性

}

static 修饰时,相当于公共属性,可以由类的某个对象调用;

也可以由类直接调用(Book.pub),调用时不需要实例化对象

2. static 定义方法
class Book {
      private String title;
      private double price;
      private static String pub = "清华大学出版社";// static 修饰属性
      public Book(String title, double price){
        this.title = title;
        this.price = price;
      }
      public static void setPub(String p){ // static 修饰方法
         this.pub = p;
      }
      public String getInfo(){
             return "图书名称: "+this.title+",价格"+this.price+",出版社:"+this.pub
     }
}

public class TestDemo{
public static void main(String args[]){
               //在没有对象产生时调用static属性
               Book.setPub("清华大学出版社");
               Book ba = new Book("Java编程",38.8);
               Book bb = new Book("Android编程",56.2);
               Book bc = new Book("Oracle编程",25.3);
               System.out.println(ba.getInfo());
               System.out.println(ba.getInfo());
               System.out.println(ba.getInfo());
        }

}

从上面的代码可以看出:static 定义的方法,不受实例化对象的控制,属于独立于类的方法。


<1>static 方法不能直接访问非static属性或方法,只能够调用static 属性和方法;
<2>非 static 方法可以访问static的属性和方法,不受任何限制。
为什么 static 方法会存在上面的限制呢?
这是因为所有非static定义的结构,必须在类已经明确产生了实例化对象才会分配堆内存空
间;
而所有的static定义的结构,不受实例化对象的控制,可以在没有实例化对象的时候访问。

3. static 修饰代码块

public class TestDemo{

      static{//static 修饰代码块

         System.out.println("**********");

        }

public static void main(String args[]){

       }

}

知识点:静态块会优先于主方法执行

4.static 修饰内部类

class Outer{ // 外部类
   private static String msg = "Hello World!";
   static class Inner { //  static定义的内部类
         public void print(){
             System.out.println(msg);
         }
   }
}

public class TestDemo(){
      public static void main(String args[]){         
           Outer.Inner in = new Outer.Inner();
          //如果不是static内部类,则为new Outer().new Inner();
           in.print();     
      }
}
static定义了内部类,不会受到外部类的实例化对象控制。

如果一个内部类使用了static定义的话,那么这个类就变成了一个外部类,

并且只能够访问外部类中定义的static操作


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值