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);
}
}
运行结果:
从上面的案例可以看到,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());
}
}
运行结果:
很明显得出结论。
来源:https://blog.csdn.net/morixinguan/article/details/84982486
猜你喜欢
- 程序结构:一、配置 1. 在pom.xml中添加依赖pom.xml文件如下:<?xml version="1.0&
- 前言目前正在做的项目,为了增加用户的体验度,准备增加一些动画效果,其中底部栏中间按钮的点击事件参考了闲鱼的动效,便在此基础上仿写了该动效,并
- 目录Spring事件驱动源码实战在项目实际开发过程中,我们有很多这样的业务场景:一个事务中处理完一个业务逻辑后需要跟着处理另外一个业务逻辑,
- JOL简介JOL的全称是Java Object Layout。是一个用来分析JVM中Object布局的小工具。包括Object在内存中的占用
- @RequestBody出现400 Bad Request的问题今天与同事调试一个接口,发现后台使用@RequestBody老是获取不到数据
- 可以静态绑定数据源,这样就自动为DataGridView控件添加 相应的行。假如需要动态为DataGridView控件添加新行,方法有很多种
- 一,项目简介经过调查研究进行开发设计的这款仓库管理系统,主要是为商家提供商品货物进销存的信息化管理,以便让商家在竞争如此激烈的今天占据一定的
- 已知字符串“aabbbcddddeeffffghijklmnopqrst”编程找出出现最多的字符和次数,要求时间复杂度小于O(n^2)/**
- 本文向您展示了在 Flutter 中实现完美的验证码输入框几种不同方法。重点是什么?真实世界的 完美的验证码输入框或 PIN 输入 UI 通
- 前面的文章使用sharding-jdbc实现水平分表中详细记录了如何使用sharding-jdbc实现水平分表,即根据相应的策略,将一部分数
- 前言无论Spring的XML配置或者Java配置,都可以配置自动扫描,也就是在指定包及其子包下的component,都会被自动扫描并被Spr
- 本文介绍C#编程时,给定一个字符串,如何判断它是不是一个日期。本文将介绍两种方法,一个是判断字符串是否是时间,如果是就转换为一个时间变量,第
- 把三状态转换图放在这,方便分析方法的作用:1.Session的save()方法Session是Hibernate所有接口中最重要的接口,提供
- Java是面向对象的编程语言,在我们开发Java应用的程序员的专业术语里,Java这个单词其实指的是Java开发工具,也就是JDK(Java
- 博主在初学注解的时候看到网上的介绍大部分都是直接介绍用法或者功能,没有实际的应用场景,篇幅又很长导致学习的时候难以理解其意图,而且学完就忘Q
- 本文分为俩部分:第一部分介绍如何给Eclipse安装Spring Boot开发插件spring tool suite(简称STS);第二部分
- 请求进入DispatcherServlet的doDispatch后,获取HandlerMethod。然后根据HandlerMethod来确认
- 前言什么是mybatis二级缓存?二级缓存是多个sqlsession共享的,其作用域是mapper的同一个namespace。即,在不同的s
- 本文实例讲述了java读取properties配置文件的方法。分享给大家供大家参考。具体分析如下:这两天做java项目,用到属性文件,到网上
- java 多线程死锁 相信有过多线程编程经验的朋友,都吃过死锁的苦。除非你不使用多线程,否则死锁的可能性会一直存在。为什么会出现