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 }
  • 相关阅读:
    记2008年7月25日午后 心情
    [多媒体]词典编码
    [多媒体]算术编码、游程编码
    [多媒体]数据压缩的类型
    [多媒体]理解PCM、DPCM、APCM、ADPCM
    C++异常处理
    [转]linux上SVN解决冲突的办法
    从海量数据查找有或者没有出现的数据
    八数码问题
    [转]linux中强大的screen命令
  • 原文地址:https://www.cnblogs.com/huang-changfan/p/9317136.html
Copyright © 2011-2022 走看看