关键字static

简介: 关键字static

static关键字的使用

1.static:静态的


2.static可以用来修饰:属性、方法、代码块、内部类


3.使用static修饰属性:静态变量(或类变量)


3.1属性:按是否使用static修饰,又分为:静态属性 VS 非静态属性(实例变量)


实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值修改。

静态变量:我们创建了类的多个对象,每个对象都共享同一个静态属性。当通过某一个对象修改静态属性时,会导致其他对象中调用此静态变量时,是修改过了的。

3.2 static 修饰属性的其他说明:


1 静态变量随着类的加载而加载。可以通过"类.静态变量"的方式进行调用

2 静态变量的加载要早于对象的创建。

3 由于类只加载一次,则静态变量在内存中也只存在一份:存在方法区的静态域中。

4



3.3 静态属性举例:System.out;Math.PI;


4.使用static修饰方法:静态方法

1.随着类的加载而加载。可以通过"类.静态方法"的方式进行调用。


3 静态方法中只能调用静态的方法或属性

非静态方法中既能调用非静态的方法或属性,也能调用静态的方法或属性


5.static注意点:


5.1在静态方法中不能使用this关键字、super关键字

5.2关于静态属性和静态方法的使用,大家都从生命周期的角度去理解。

6.开发中,如何确定一个属性是否要声明为static的?


》属性是可以被多个对象所共享的,不会随着对象的不同而不同的。

》类的常量也常常声明为static

开发中,如何确定一个方法是否要声明为static的?


》操作静态属性的方法,通常设置为static的

》工具类中的方法,习惯上声明为static的。比如:Math、Arrays、Collections

在B站学习java写的代码

代码如下

/*
 * static关键字的使用
 * 
 * 1.static:静态的
 * 2.static可以用来修饰:属性、方法、代码块、内部类
 * 
 * 3.使用static修饰属性:静态变量(或类变量)
 *    3.1属性:按是否使用static修饰,又分为:静态属性 VS 非静态属性(实例变量)
 *    实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中非静态属性。当修改其中一个对象中的
 *          非静态属性时,不会导致其他对象中同样的属性值修改。
 *    静态变量:我们创建了类的多个对象,每个对象都共享同一个静态属性。当通过某一个对象修改静态属性时,会导致
 *          其他对象中调用此静态变量时,是修改过了的。
 *    3.2 static 修饰属性的其他说明:
 *      1 静态变量随着类的加载而加载。可以通过"类.静态变量"的方式进行调用
 *      2 静态变量的加载要早于对象的创建。
 *      3 由于类只加载一次,则静态变量在内存中也只存在一份:存在方法区的静态域中。
 *  
 *      4     类变量   实例变量
 *          类    yes       no
 *          对象     yes       yes
 *  
 *    3.3 静态属性举例:System.out;Math.PI;
 * 4.使用static修饰方法:静态方法
 *    1.随着类的加载而加载。可以通过"类.静态方法"的方式进行调用。
 *      2     静态方法    非静态方法
 *    类    yes       no
 *      对象     yes       yes
 *      3 静态方法中只能调用静态的方法或属性
 *        非静态方法中既能调用非静态的方法或属性,也能调用静态的方法或属性  
 *   
 * 5.static注意点:
 *    5.1在静态方法中不能使用this关键字、super关键字
 *    5.2关于静态属性和静态方法的使用,大家都从生命周期的角度去理解。
 * 
 * 6.开发中,如何确定一个属性是否要声明为static的?
 *    》属性是可以被多个对象所共享的,不会随着对象的不同而不同的。
 *    》类的常量也常常声明为static
 * 
 *   开发中,如何确定一个方法是否要声明为static的?
 *      》操作静态属性的方法,通常设置为static的
 *      》工具类中的方法,习惯上声明为static的。比如:Math、Arrays、Collections
 *      
 *          
 *          
 */

StaticTest类

package com.day0128_3;
public class StaticTest {
  public static void main(String[] args) {
    Chinese.nation="中国";
    Chinese c1=new Chinese();
    c1.name="姚明";
    c1.age=40;
    c1.nation="CHN";
    Chinese c2=new Chinese();
    c2.name="马龙";
    c2.age=30;
    c2.nation="CHNINA";
    System.out.println(c1.nation);//CHNIA
    //编译不通过
//    Chinese.name="张继科";//Cannot make a static reference to the non-static field Chinese.name
    c1.eat();
    Chinese.show();
    //编译不通过
//    Chinese.eat();//Cannot make a static reference to the non-static method eat() from the type  Chinese
//    Chinese.info;
  }
}
//中国人
class Chinese{
  String name;
  int age;
  static String nation;
  public void eat() {
    System.out.println("中国人吃中餐");
    //调用非静态结构
    this.info();
    System.out.println("name :"+name);
    //调用静态结构
    walk();
    System.out.println("nation  :"+nation);
  }
  public static void show() {
    System.out.println("我是一个中国人");
    //不能调用非静态的方法或属性
//    eat();//Cannot make a static reference to the non-static method eat() from the type Chinese
//    name="Tom";//Cannot make a static reference to the non-static field  name
    //可以调用静态的方法或属性
    System.out.println(Chinese.nation);
    walk();
  }
  public void info() {
    System.out.println("name :"+name+",age :"+age);
  }
  public static void walk() {
  }
}
相关文章
|
5月前
|
消息中间件 Kubernetes NoSQL
c++11 关键字 override 与 final
c++11 关键字 override 与 final
|
11月前
|
存储 Cloud Native Linux
C++ 关键字override,final的作用
C++ 关键字override,final的作用
|
2月前
|
存储 Java 编译器
关键字: final详解
掌握final关键字的使用对于Java程序员来说至关重要。它不仅能够提高程序的安全性和清晰性,还可以帮助编译器在一些情况下进行优化。恰当使用final可以使你的Java代码更加健壮、高效。
30 0
|
5月前
|
存储 Java C++
31.C#:关键字static
31.C#:关键字static
42 1
|
5月前
|
存储 编译器 C++
掌握 C++ 中 static 关键字的多种使用场景
在最开始C中引入了static关键字可以用于修饰变量和函数,后来由于C++引入了class的概念,现在static可以修饰的对象分为以下5种:
77 0
|
11月前
|
存储 C语言
常见关键字 typedef以及static的介绍
常见关键字 typedef以及static的介绍
62 0
|
Java 编译器 C#
C#中的override和new关键字
在 C# 中,派生类可以包含与基类方法同名的方法。 基类方法必须定义为 virtual。 如果派生类中的方法前面没有 new 或 override 关键字,则编译器将发出警告,该方法将有如存在 new 关键字一样执行操作。 如果派生类中的方法前面带有 new 关键字,则该方法被定义为独立于基类中的方法。 如果派生类中的方法前面带有 override 关键字,则派生类的对象将调用该方法,而不是调用基类方法。 可以从派生类中使用 base 关键字调用基类方法。
67 1
关键字static
延长局部变量的生命周期,缩小全局变量和函数的作用
38 0
|
C语言
竟然有人如此解释关键字中的static
竟然有人如此解释关键字中的static
52 0
竟然有人如此解释关键字中的static
|
Java
关键字final
关键字final
40 0