当前位置: 首页 > 编程笔记 >

JAVA Static关键字的用法

姬高扬
2023-03-14
本文向大家介绍JAVA Static关键字的用法,包括了JAVA Static关键字的用法的使用技巧和注意事项,需要的朋友参考一下

static关键字的作用:

用来修饰成员变量和方法,被修饰的成员是属于类的,而不单单是属于某个对象的,也就是说,可以不靠对象来调用。

首先我们来介绍类变量

当static修饰成员变量时,该变量称为类变量,该类的每个对象都共享同一个类变量的值,任何

对象都可以更改该变量的值,但也可以在不创建该类对象的情况下,通过类名对类变量进行操作

命名格式

static 数据类型 变量名;

static int age;

下面我们来举个例子,让大家体会体会类变量的作用

就比如梁山有108位好汉我们给这108位好汉按照次序每人一个编号,这就需要使用到类变量

定义一个Person类

public class Person {
 private int age;
 private String name;
 private int id;
 private static int count=1;
 public int getId() {
  return id;
 }

 @Override
 public String toString() {
  return "Person{" +
    "age=" + age +
    ", name='" + name + '\'' +
    ", id=" + id +
    '}';
 }

 public void setId(int id) {
  this.id=count;
  count++;
 }

 public Person(int age, String name) {
  this.age = age;
  this.name = name;
  this.id=count;
  count++;
 }

 public Person() {
 }

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }
}

函数

public class Test {
 public static void main(String[] args) {
  Person one = new Person(18, "及时雨宋江");
  System.out.println(one);
  Person two = new Person(18, "卢俊义");
  System.out.println(two);

 }
}

结果

我们看到id的数值在不断的+1,这是因为他们的id都等于了一个公共的类变量

接下来我们来介绍静态方法

静态方法即类中使用static修饰的方法,该方法使用类名可以直接调用,不需要创建类的对象

定义格式

修饰符 static 返回置类型 方法名 (参数列表){

//执行语句

}

示例

public static void eat(){
System.out.println("吃饭了");
}

使用静态方法的注意事项

静态方法只可以直接访问类变量与静态方法

静态方法不能访问普通成员变量或成员方法

静态方法中不可以使用this关键字(因为this代表的是使用该方法的对象,而静态方法是属于类的,this无从指向,所以不可以使用)

下面我们写一段代码来使用一下静态方法

public class Person2 {
 public static void test(){
  System.out.println("这是静态方法" );
 }
}
public class Test {
 public static void main(String[] args) {
  System.out.println("这是使用类名调用的:");
   Person2.test();
  Person2 person2 = new Person2();
  System.out.println("这是使用对象调用的:");
  person2.test();

 }
}

运行结果

下面我们从内存的角度来讲讲静态的原理

先上代码

public class Teacher {
 private int age;
 private String name;
 private static String subject="math";
 public Teacher(int age, String name) {
  this.age = age;
  this.name = name;
 }

 public Teacher() {
 }

 @Override
 public String toString() {
  return "Teacher{" +
    "age=" + age +
    ", name='" + name + '\'' +
    '}';
 }

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public static String getSubject() {
  return subject;
 }

 public static void setSubject(String subject) {
  Teacher.subject = subject;
 }
}
public class Test {
 public static void main(String[] args) {
  Teacher wang = new Teacher(18, "wang");
  Teacher li = new Teacher(19, "li");
 }
}

小结:普通成员变量操作各自空间,静态变量操作共享空间

静态代码块,敲重点!!!这个在我们后面学习中会经常使用到

什么是静态代码块呢?

定义在成员位置,使用static修饰的代码块{}

位置:类中方法外

执行随着类的加载而执行且只执行一次,优先于main方法和构造方法的执行

格式

 public class Person {
 static {  
 }
 }

这里就不深究了后面的文章我找几乎再说说

以上就是static关键字的一些基础知识,如有错误请各位批评指正

到此这篇关于JAVA Static关键字的用法的文章就介绍到这了,更多相关JAVA Static关键字内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 本文向大家介绍java synchronized关键字的用法,包括了java synchronized关键字的用法的使用技巧和注意事项,需要的朋友参考一下 0.先导的问题代码     下面的代码演示了一个计数器,两个线程同时对i进行累加的操作,各执行1000000次.我们期望的结果肯定是i=2000000.但是我们多次执行以后,会发现i的值永远小于2000000.这是因为,两个线程同时对i进行写入

  • 对于可见性,Java 提供了 volatile 关键字来保证可见性和禁止指令重排。 volatile 提供 happens-before 的保证,确保一个线程的修改能对其他线程是可见的。当一个共享变量被 volatile 修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。 从实践角度而言,volatile 的一个重要作用就是和 CAS 结合,保证了原子性,详

  • Swift 5.x 关键字 mutating 的作用 1. 在实例方法中修改属性 结构体和枚举是值类型. 默认情况下, 值类型属性不能被自身的实例方法修改. 可以选择在func关键字前加上mutating关键字来指定实例方法内可以修改属性 e.g. struct Point { var x = 0.0, y = 0.0 mutating func moveBy(x de

  • 下面是 Java 里面的关键字。不能使用以下任一作为您的程序标识符。关键字 const 和 goto 语句被保留,即使他们目前尚未使用。true, false, 和 null 似乎是关键字,但它们实际上是字面值;你不能使用它们作为你的程序标识符。 abstract continue for new switch assert*** default goto*

  • 关键字是不能做为变量的。Lua 的关键字不多,就以下几个: and break do else elseif end false for function if in local nil not or repeat return then true until while

  • 模型 21.1 model 视图 21.1 view 处理器方法 21.1 handler method 处理器 21.1 handler 控制器 21.1 controller 命令对象 21.1 command object 表单返回对象 21.1 form-backing object 响应 21.1 response 视图解析器 21.1 view resolver 验证器 21.1.1