Java应用程序开发学习之static关键字应用

作者:Engineer-Bruce_Yang 时间:2021-12-20 13:23:41 

Java的static关键字和C/C++语言的关键字有所不同:

一旦在Java里使用了static关键字,那么这样的内容不再属于对象自己,而是属于类本身的,所以凡是本类的对象,都共享一份。

1、使用Java static关键字修饰成员变量

以下是Stundent类。


package app_one;
public class Student {
private int id = 0 ;
private int age = 0;
private String name = null;
static int id_count = 0 ;
public Student(int age , String name)
{
this.age = age ;
this.name = name ;
this.id = ++id_count ;
}
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;
}
}

以下是主类:


package app_one;
public class hello {
public static void main(String[] args)
{
Student st1 = new Student(14,"小明");
System.out.println("年龄:" + st1.getage() + " 姓名:" + st1.getName() + " 序号:" + Student.id_count);
Student st2 = new Student(15,"小红");
System.out.println("年龄:" + st2.getage() + " 姓名:" + st2.getName() + " 序号:" + Student.id_count);
Student st3 = new Student(18,"小李");
System.out.println("年龄:" + st3.getage() + " 姓名:" + st3.getName() + " 序号:" + Student.id_count);
}
}

运行结果:

Java应用程序开发学习之static关键字应用

从上面的案例可以看到,id_count是可以自动进行计数的,每一次实例化Student类的时候,id_count就自动+1,然后赋值给成员变量id,由于定义了static关键字的变量不再属于对象,而是属于类,所以在访问的时候,我们可以用类名称().静态变量的形式来进行访问。

2、使用static修饰成员方法

将上述程序中Student类的id_count修改为私有的静态变量,并添加一个静态的Get_idcount方法。


private static int id_count = 0 ;
public static int Get_idcount()
{
return id_count ;
}

在主类中获取id_count不通过类.变量的方式获取,而是改为类.方法()的方式获取。

Student.Get_idcount()

强调两点:

  • (1)成员方法可以访问成员变量

  • (2)成员方法可以访问静态变量

  • (3)静态方法可以访问静态变量

  • (4)静态方法不可以访问成员变量(非静态)

原因:因为在内存中是先有的静态内容,后有的非静态内容

  • (1)静态方法当中不能使用this

原因:因为this代表当前对象,通过谁调用的方法,谁就是当前对象

小结:

一旦使用了static修饰成员方法,那么这就成为了静态方法,不属于对象,而是属于类本身的。

对于静态方法来说,可以通过对象名进行调用,也可以直接通过类名称来调用。

如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它

如果有了static关键字,那么不需要创建对象,直接就能通过类名称进行调用。

无论是成员变量,还是成员方法,如果有了static,都推荐使用类名称进行调用。

静态变量:类名称.静态变量

静态方法:类名称.静态方法();

对于本类中的静态方法,可以省略类名称。

3、静态static的内存图

参照学习传智的Java课程给出的图,清晰易懂。

Java应用程序开发学习之static关键字应用

4、静态代码块

静态代码块格式:


public class 类名称{
 static
 {
   //静态代码块的内容
 }
}
  • (1)特点:当第一次用到本类时,静态代码块执行唯一的一次,静态内容总是优先于非静态,所以静态代码块比构造方法先执行

  • (2)典型用途:用来一次性地对静态成员变量进行赋值。

针对上面的案例做修改,在Student类中添加一个静态代码块:


package app_one;
public class Student {
private int id = 0 ;
private int age = 0;
private String name = null;
private static int id_count = 0 ;
static
{
System.out.println("静态代码块运行!");
}
public Student(int age , String name)
{
System.out.println("构造方法运行!");
this.age = age ;
this.name = name ;
this.id = ++id_count ;
}
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 int Get_idcount()
{
return id_count ;
}
}

然后主程序修改如下:


package app_one;
public class hello {
public static void main(String[] args)
{
Student st1 = new Student(14,"小红");
System.out.println("姓名: "+st1.getName() + " 年龄: " + st1.getage() + " 序号: "+Student.Get_idcount());
Student st2 = new Student(14,"小李");
System.out.println("姓名: "+st2.getName() + " 年龄: " + st2.getage() + " 序号: "+Student.Get_idcount());
}
}

运行结果:

Java应用程序开发学习之static关键字应用

很明显得出结论。

来源:https://blog.csdn.net/morixinguan/article/details/84982486

标签:java,static,开发,应用
0
投稿

猜你喜欢

  • springboot配置文件中属性变量引用方式@@解读

    2023-11-24 20:39:18
  • Spring Boot 读取静态资源文件的方法

    2023-08-25 02:53:07
  • java中的文件操作总结(干货)

    2023-11-08 22:24:29
  • Java 十大排序算法之希尔排序刨析

    2021-11-16 09:27:31
  • 分布式Netty源码分析EventLoopGroup及介绍

    2022-02-12 03:20:51
  • 实例详解SpringBoot默认的JSON解析方案

    2023-07-21 07:34:20
  • SpringMVC后端返回数据到前端代码示例

    2023-06-20 13:12:47
  • 基于<aop:aspect>与<aop:advisor>的区别

    2023-01-22 21:53:35
  • 50 道Java 线程面试题(经典)

    2023-11-23 19:47:37
  • 详解使用Spring3 实现用户登录以及权限认证

    2023-05-07 03:59:12
  • Java并发线程池实例分析讲解

    2022-08-05 20:25:40
  • Java @GlobalLock注解详细分析讲解

    2023-06-03 03:55:53
  • Java实现文件切割拼接的实现代码

    2022-04-15 08:10:03
  • Java集合系列之ArrayList源码分析

    2023-01-31 03:02:36
  • Java中逆序遍历List集合的实现

    2022-04-03 23:48:13
  • 详解SpringBoot+SpringSecurity+jwt整合及初体验

    2023-11-28 23:54:48
  • 一篇带你解析入门LongAdder源码

    2023-11-28 20:17:52
  • java中map和对象互转工具类的实现示例

    2023-06-05 11:08:30
  • Springcloud Nacos基本操作代码实例

    2023-07-07 18:24:22
  • java中pdf转图片的实现方法

    2021-07-22 02:26:06
  • asp之家 软件编程 m.aspxhome.com