zoukankan      html  css  js  c++  java
  • Java-static关键字

    static关键字

    1,声明static属性

    static是一个关键字,这个关键字主要可以用来定义属性和方法,下面将针对于此关键字的使用进行分析。

    ·使用static定义属性

    在一个类之中,所有的属性一旦定义了实际上内容都交由各自的堆内存空间所保存。

    ·范例:定义一个程序类

     1 class Person{//创建所有同一个国家的类
     2     private String name;
     3     private int age;
     4     String country="中华民国";//暂时先不封装
     5     public Person(String name, int age) {
     6         this.name = name;
     7         this.age = age;
     8     }
     9     public String getInfo(){
    10         return "【姓名】"+this.name+"【年龄】"+this.age+"【国家】"+this.country;
    11     }
    12 }
    13 public class Main {
    14     public static void main(String[] args) {
    15         Person perA=new Person("张三",18);
    16         Person perB=new Person("李四",28);
    17         Person perC=new Person("王五",38);
    18         System.out.println(perA.getInfo());
    19         System.out.println(perB.getInfo());
    20         System.out.println(perC.getInfo());
    21     }
    22 }

    但是当我们需要更改的国家名称的时候,要将所有的Person类的实例化对象的country属性更改内容。 

    ·范例:static定义公共属性

     1 class Person{//创建所有同一个国家的类
     2     private String name;
     3     private int age;
     4     static String country="中华民国";//暂时先不封装
     5     public Person(String name, int age) {
     6         this.name = name;
     7         this.age = age;
     8     }
     9     public String getInfo(){
    10         return "【姓名】"+this.name+"【年龄】"+this.age+"【国家】"+this.country;
    11     }
    12 }
    13 
    14 public class Main {
    15     public static void main(String[] args) {
    16         Person perA=new Person("张三",18);
    17         Person perB=new Person("李四",28);
    18         Person perC=new Person("王五",38);
    19         perA.country="中华人民共和国";
    20         System.out.println(perA.getInfo());
    21         System.out.println(perB.getInfo());
    22         System.out.println(perC.getInfo());
    23     }
    24 }

     更改任意实例化对象的country内容,其他所有Person类实例化对象的country内容也跟着变化。

    但是对于static属性的访问需要注意一点:由于其本身的公共的属性,虽然可以通过对象进行访问,但是最好的做法应该是通过所有对象的最高代表(类)来进行访问,static属性可以由类名称直接调用。

    Person.country="中华人民共和国";

    static属性虽然定义在类之中,但是其可以在没有实例化对象的时候调用,本质原因:static属性的堆内存在全局数据区,不需要通过new来开辟堆内存空间。

    ·范例:在没有实例化对象的时候进行static属性调用

     

    1 public class Main {
    2     public static void main(String[] args) {
    3         System.out.println(Person.country);
    4         Person.country="中华人民共和国";
    5         System.out.println(Person.country);
    6     }
    7 }

     

     

     在以后进行类设计的时候首选的一定是非static属性(95%),而考虑到公共信息存储的时候才会使用到static属性(5%)。

    2,声明static方法

    static关键字也可以进行方法的定义,static方法的主要特点在于,其可以直接由类名称在没有实例化对象的情况下进行调用。

    ·范例:定义static方法

    1 private static String country="中华民国";//已经封装,不能进行直接访问
    2 
    3 public static void setCountry(String c){
    4     country=c;
    5 }

    ·static方法只允许调用static属性或static方法;这个时候对于程序而言方法就有两种:static方法、非static方法,这两个方法之间在调用上就有了限制:

    ·非static方法允许调用static属性与static方法;

    所有的static属性与方法都可以在没有实例化的前提下使用,但是所有非static定义的属性与方法都必须在实例化之后使用。

    this表示当前对象,this.country这个在static方法中就会出现错误!本质原因:有可能没有当前对象!!!

    如果说可以理解这个限制,那么对于之前的方法定义就可以得出新的结论:在最早讲解方法定义的时候强调过:“当前定义的方法都是在主类中定义的,并且有主方法调用的”。

    ·范例:主类中的static方法调用

    1 public class Main {
    2     public static void main(String[] args) {
    3         print();//直接调用static方法
    4     }
    5     static void print(){
    6         System.out.println("在主类中的方法实现的static方法");
    7     }
    8 }

    一般情况下主类不会写太多代码。

    ·范例:主类中实现的非static方法调用

     1 public class Main {
     2     public static void main(String[] args) {
     3         new Main().print();//实例化匿名对象,之后才调用非static方法
     4     }
     5     //public void print(){//由于都在主类中所以权限都可以使用
     6 
     7     //private void print(){
     8 
     9     void print(){//默认权限
    10 
    11 
    12         System.out.println("在主类中的方法实现的非static方法");
    13     }
    14 }

    3,static应用案例

    略,一个简单的使用static属性进行数量统计的实现

     

     

     

     

  • 相关阅读:
    OpenGL播放yuv视频
    windows 播放器(wzplayer)
    Lotus中的保留域
    Domino Attachment and Object Service (DAOS)
    关于MyEclipse
    DB2站点荟萃
    @IsMember用法
    深入浅出SharePoint——解读Sharepoint日志之输出缓存
    UML用例图概要
    表单设计中的网页视觉体验
  • 原文地址:https://www.cnblogs.com/Mufasa/p/11105104.html
Copyright © 2011-2022 走看看