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

 更新时间:2018年12月13日 15:15:03   作者:Engineer-Bruce_Yang  
今天小编就为大家分享一篇关于Java应用程序开发学习之static关键字应用,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

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);
 }
}

运行结果:

从上面的案例可以看到,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课程给出的图,清晰易懂。

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());
 }
}

运行结果:

很明显得出结论。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • spring boot集成smart-doc自动生成接口文档详解

    spring boot集成smart-doc自动生成接口文档详解

    这篇文章主要介绍了spring boot集成smart-doc自动生成接口文档详解,smart-doc是一款同时支持java restful api和Apache Dubbo rpc接口文档生成的工具,smart-doc颠覆了传统类似swagger这种大量采用注解侵入来生成文档的实现方法
    2022-09-09
  • 通过Java实现添加或删除PDF中的附件

    通过Java实现添加或删除PDF中的附件

    当我们在制作PDF文件或者PPT演示文稿的时候,为了让自己的文件更全面详细,就会在文件中添加附件。本文为大家整理了Java实现添加或删除PDF中的附件的方法,需要的可以参考下
    2023-01-01
  • Java使用poi做加自定义注解实现对象与Excel相互转换

    Java使用poi做加自定义注解实现对象与Excel相互转换

    这篇文章主要介绍了Java使用poi做加自定义注解实现对象与Excel相互转换,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • SpringBoot+MyBatis实现登录案例

    SpringBoot+MyBatis实现登录案例

    前端时间在网上看到有朋友在学习springboot项目的搭建过程,今天就抽空给大家分享一个案例帮助大家学习SpringBoot+MyBatis实现登录功能,具体实现代码跟随小编一起看看吧
    2021-06-06
  • 详解Spring如何解析占位符

    详解Spring如何解析占位符

    Spring一直支持将属性定义到外部的属性的文件中,并使用占占位符的形式为使用"${}"包装的属性名称,为了使用属性占位符,我们必须配置一个PropertyPlaceholderConfigurer或PropertySourcesPlaceholderConfigurer实例,本文将介绍如何解析占位符
    2021-06-06
  • Java的JSON转换库GSON的基本使用方法示例

    Java的JSON转换库GSON的基本使用方法示例

    GSON是Google制作的一个可以让Java对象与JSON互相转换的类库,下面我们就来看一下Java的JSON转换库GSON的基本使用方法示例:
    2016-06-06
  • 如何解决项目中java heap space的问题

    如何解决项目中java heap space的问题

    这篇文章主要介绍了如何解决项目中java heap space的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Spring Cloud Eureka基础应用及原理

    Spring Cloud Eureka基础应用及原理

    这篇文章主要介绍了Spring Cloud Eureka基础应用,Eureka Client中内置一个负载均衡器,用来进行基本的负载均衡,下面我们将通过搭建一个简单的Eureka例子来了解Eureka的运作原理,感兴趣的朋友一起看看吧
    2022-05-05
  • Spring IO Platform简单介绍

    Spring IO Platform简单介绍

    这篇文章主要介绍了Spring IO Platform简单介绍,具有一定借鉴价值,需要的朋友可以参考下
    2017-12-12
  • Response.AddHeader案例讲解

    Response.AddHeader案例讲解

    这篇文章主要介绍了Response.AddHeader案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08

最新评论