• Java:static的作用分析


    static表示“静态”或者“全局”的意思,但在Java中不能在所有类之外定义全局变量,只能通过在一个类中定义公用、静态的变量来实现一个全局变量


    一、静态变量

    1. Java中存在两种变量,一种是static修饰的静态变量,又称为类变量。另一种是没有被static修饰的变量,称为实例变量。

    2. 被static修饰的成员变量或成员方法独立于该类的任何对象(实例),被所有类对象共享。如果一个实例对象对静态成员变量做了修改,其他实例对象访问该静态成员变量也会受到影响。

     1 package com.huiAlex;
     2 
     3 public class Cat {
     4     private String name;
     5     private static int age;
     6     private String color;
     7 
     8     public static void main(String[] args) {
     9         Cat cat1 = new Cat();
    10         Cat cat2 = new Cat();
    11 
    12         cat1.color = "white";
    13         cat1.name = "小花";
    14         cat1.age = 4;
    15 
    16         cat2.color = "black";
    17         cat2.name = "小黑";
    18         
    19         System.out.println("小黑的年龄是: "+cat2.age);
    20     }
    21 }

    以上代码中,cat1对静态变量age进行了修改,cat2访问age时,age已经被修改过了。在实际应用中,一定要小心使用静态变量。虽然可以达到共享成员变量的目的,但是也使得成员变量难以控制,可能带来意想不到的问题。

    3. 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。

    对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)


    二、静态方法

    1. 静态方法可以直接通过类名进行调用,也可以通过任何实例对象进行调用(不推荐)

     1 package com.huiAlex;
     2 
     3 public class Cat {
     4     private String name;
     5     private static int age;
     6     private String color;
     7 
     8     public static void main(String[] args) {
     9         Cat cat1 = new Cat();
    10 
    11         System.out.println(Cat.Meow());
    12         System.out.println(cat1.Meow());
    13     }
    14 
    15     public static String Meow(){
    16         return "猫都会喵喵叫~";
    17     }
    18 }

    2. 静态方法必须被实现,不能是abstract类型

    3. 静态方法中不能使用this和super关键字

    4. 静态方法中只能直接访问静态变量和其他静态方法,如果需要访问其他非静态成员变量或成员方法,必须先实例化一个对象,再通过对象进行访问。

     1 package com.huiAlex;
     2 
     3 public class Cat {
     4     private String name;
     5     private static int age;
     6     private String color;
     7 
     8     public static void main(String[] args) {
     9         System.out.println(Cat.Meow());
    10     }
    11 
    12     public String likeWarm(){
    13         return "猫都喜欢暖和的地方";
    14     }
    15 
    16     public static String likeFish(){
    17         return "猫都喜欢吃鱼";
    18     }
    19 
    20     public static String Meow(){
    21         Cat.age = 8;   // 直接访问静态成员变量
    22         Cat cat2 = new Cat();
    23         cat2.name = "小花";  // 通过实例化后的对象访问非静态成员变量
    24         System.out.println("这只猫叫 "+cat2.name);
    25         System.out.println(Cat.likeFish());    // 直接访问静态方法
    26         System.out.println(cat2.likeWarm());  //通过实例化后的对象访问非静态方法
    27         
    28         return "猫都会喵喵叫~";
    29     }
    30 }


     三、static代码块 

    1. static代码块也叫静态代码块,是在类中独立于类成员的static语句块

    2. 可以存在多个静态代码块,不能放在任何的方法体内

    3. JVM加载类时会执行这些静态的代码块

    4. 如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次

     1 public class Cat {
     2     private String name;
     3     private static int age;
     4     private String color;
     5 
     6     static{
     7         Cat.age = 2;
     8         System.out.println(age);
     9         Cat cat = new Cat();
    10         System.out.println(cat.likeWarm());
    11     }
    12 
    13     public static void main(String[] args) {
    14 
    15     }
    16 
    17     public String likeWarm(){
    18         return "猫都喜欢暖和的地方";
    19     }
    20 
    21     static{
    22         Cat.age = 4;
    23         System.out.println(age);
    24         Cat cat1= new Cat();
    25         cat1.name = "小花";
    26         System.out.println(cat1.name);
    27     }
    28 }

    运行结果:

  • 相关阅读:
    How to Setup a Private Proxy Server on EC2 in Under 10 Minutes
    How to Create a Cron Job (Scheduled Task) for Your Website or Blog
    NPM, BOWER, GIT, AND BASH PROXY CONFIGURATIONS
    Android: 通过Runtime.getRuntime().exec调用底层Linux下的程序或脚本
    Proguard breaking audio file in assets or raw
    SOCKSify Ruby
    UNIX / Linux: 2 Ways to Add Swap Space Using dd, mkswap and swapon
    窗体之间传值的方法
    扩展方法,
    反射 type 的基本用法,动态加载插件
  • 原文地址:https://www.cnblogs.com/huiAlex/p/8064003.html
Copyright © 2020-2023  润新知