zoukankan      html  css  js  c++  java
  • 1.6(java学习笔记)static关键字

    static关键字

    1.static修饰变量也称静态变量,静态变量存放在静态区被该类的所有对象共享。

    例如,定义了一个类class User{static Sring city = "a城"},将类中的一个city属性定义为静态变量。我们创建一个对象use1,然后可以通过user1.city = "b城"修改静态区里面User类的信息。User类中city的初始值就发生了改变,变成了b城。我们再新建一个对象use2,打印user2,会发现user2.city变成了b城。

    (结合之前讲的内存分析说的,静态区中存放类信息,静态变量等,静态区只有一个,被所有线程共享);

    如果没有加static的变量,称为非静态变量,非静态变量只属于对象,每个对象有每个对象的非静态变量。修改非静态变量只会改变单个对象的值,并不会改变类类中的信息。

    以下列代码为例:

     1 public class TestStatic {
     2     public static void main(String[] args){
     3         User a1 = new User();
     4         a1.Info();
     5         a1.city = "b城";        //city为静态变量,修改后存放在静态区的User类中city的信息也被修改了。
     6         a1.Info();              //此时类中city的值时“b城”
     7         User a2 = new User();   //新建一个对象,输出city我们会发现输出的b城
     8         a2.Info();              //说明类中的信息已经被修改,而静态变量被所有对象共享。
    9 //如果city没有static修饰,那么修改a1.city修改的只是属于a1的非静态变量, 10 } //并不会改变类中的信息,新建a2输出a2还是a城(city非static修饰时)。 11 } 12 13 class User{ 14 static String city = "a城"; //修改后就相当于static String city = “b城”; 15 void Info(){ 16 System.out.println(city); 17 } 18 }
    输出结果:
    a城 b城 b城

    2.static修饰方法,最主要的目的是可以不用创建对象直接通过类来引用方法,也称类方法可通过类名直接调用。

     1 public class TestStatic {
     2     public static void main(String[] args){
     3         User.Info();    //没有创建对象,但可以通过类名直接调用方法。
     4     }
     5 }
     6 
     7 class User{
     8     static String city = "a城";
     9     static void Info(){
    10         System.out.println(city);
    11     }
    12 }
    输出结果:
    a城

    但有一点需要注意,静态方法中不能调用非静态方法、属性,但非静态方法中可以调用静态方法、属性。

    1 class User{
    2     String name;
    3     static String city = "a城";
    4     static void Info(){
    5         System.out.println(city);
    6         name = "123";   //静态方法中调用了非静态变量或方法是不行的,在name前面加上static就可以了。
    7     }                   //即静态方法中可以调用静态方法和属性。
    8 }
    1 class User{
    2     static String name;
    3     static String city = "a城";
    4     void Info(){
    5         System.out.println(city);
    6         name = "123";   //非静态方法中可以调用静态方法和属性。
    7     }
    8 }
  • 相关阅读:
    c#中out与ref的用法与区别
    一次不该出现的bug
    js弹出蒙版
    foreach中不能修改元素的值
    C#中使用正则表达式来过滤html字符
    细微之处才能显示水平
    js画直线 拓荒者
    XSLT模板转换XML文档 拓荒者
    怪异的JavaScript Date对象 拓荒者
    [转]C++ 笔记点滴 拓荒者
  • 原文地址:https://www.cnblogs.com/huang-changfan/p/9317136.html
Copyright © 2011-2022 走看看