Java 深入学习static关键字和静态属性及方法

目录
  • static关键字
  • 静态属性
  • 静态方法
    • 静态方法的使用
    • 静态代码块

static关键字

在定义一个类时,只是描述某事物的特征和行为,并没有产生具体的数据,只有通过new关键字创建该类的实例对象时,才会开辟栈内存及内存,在堆内存中要保存对象的属性时,每个对象会有自己的属性。

如果希望某些属性被所有对象共享,就必须将其声明为static属性,如果属性使用了static关键字进行修饰,则该属性可以直接使用类名称进行调用,static关键字还可以修饰成员方法。

静态属性

如果在Java程序中使用static修饰属性,则该属性称为静态属性(也称全局属性),静态属性可以使用类名直接访问。

格式如下:

类名.属性名

举例:

class student1{
String name;
int age;
String school="A大学";
public student1(String name,int age){
this.name=name;
this.age=age;
}
public void info(){
System.out.println("姓名:"+this.name+"年龄:"+this.age+"学校:"+school);
}
}
public class Example{
public static void main(String[]args){
student1 stu1=new student1("张三",10);
student1 stu2=new student1("李四",20);
student1 stu3=new student1("王五",18);
stu1.info();
stu2.info();
stu3.info();
}
}

输出:

姓名:张三年龄:10学校:A大学
姓名:李四年龄:20学校:A大学
姓名:王五年龄:18学校:A大学

上述实例,三名同学均来自A大学。

假设现在A大学需要改名为B大学,那么意味着,学校中所有学生的学校信息都要被修改,这样做显然是很麻烦的。

为了解决这种问题,我们可以使用static关键字修饰school属性,将其变为公共属性,school只会分配一块内存空间,被student类的所有对象共享,只要某个对象进行了一次修改,全部学生对象的school属性值都会发生改变。

修改如下:

static String school="A大学";
stu1.school="B大学";//只修改stu1对象的学校属性

输出:

//stu1/stu2/stu3对象的school属性都发生了变化
姓名:张三年龄:10学校:B大学
姓名:李四年龄:20学校:B大学
姓名:王五年龄:18学校:B大学

由此,可以得出这样一个结论, static声明的属性是所有对象共享的。

自始至终,school属性的内存空间大小并未有任何改变。

静态方法

如果想要使用类中的成员方法,就需要先将这个类实例化,而在实际开发时,开发人员有时候希望在不创建对象的情况下, 通过类名就可以直接调用某个方法 ,要实现这样的效果, 只需要在成员方法前加上static关键字,使用static关键字修饰的方法通常称为静态方法。

同静态变量一样,静态方法也可以通过类名和对象访问。

类名.方法/实例对象名.方法

静态方法的使用

举例:

class Example{
public static void main(String[]args){
student1 stu1=new student1("张三",18);
student1 stu2=new student1("jason",19);
student1 stu3=new student1("小明",20);
stu1.setAge(20);//最终将实例stu1的年龄属性替换成20
stu2.setName("小红");//最终将实例stu2的名字属性替换成"小红”
//将所有实例的学校属性替换成B大学,由于它是使用static声明的,所以可以直接使用类名进行调用
student1.setSchool("B大学");
stu1.info();
stu2.info();
stu3.info();
}
}
class student1{
private String name;
private int age;
private static String school="A大学";
public student1(String name,int age){
this.name=name;
this.age=age;
}
public void info(){
System.out.println("姓名:"+this.name+",年龄:"+this.age+",学校:"+school);
}
//将student1类的所有属性进行封装,要想更改属性就必须使用setter方法
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
public static String getSchool(){
return school;
}
public static void setSchool(String school){
student1.school=school;
}
}

输出:

姓名:张三,年龄:20,学校:B大学
姓名:小红,年龄:19,学校:B大学
姓名:小明,年龄:20,学校:B大学

静态方法只能访问静态成员,因为非静态成员需要创建对象才能访问,即随着对象的创建,非静态成员才会分配内存,而静态方法在被调用时可以不创建任何对象。

静态代码块

在Java类中, 用static关键字修饰的代码块称为静态代码块 ,当被类加载时,静态代码块会执行,由于类只加载一次,因为静态代码块只执行一次,在程序中,通常使用静态代码块对类的成员变量进行初始化。

举例:

class Example{
public static void main(String[]args){
student1 stu1=new student1();
student1 stu2=new student1();
student1 stu3=new student1();
}
}
class student1{
String name;
//构造代码块
{
System.out.println("我是构造代码块");
}
//静态代码块
static{
System.out.println("我是静态代码块");
}
//构造方法
public student1(){
System.out.println("我是student1类的构造方法");
}
}

输出:

我是静态代码块
我是构造代码块
我是student1类的构造方法
我是构造代码块
我是student1类的构造方法
我是构造代码块
我是student1类的构造方法

从输出结果,我们不难看出, 代码块的执行顺序为静态代码块—>构造代码块----->构造方法。

static修饰的量会随着class文件一同加载,属于优先级最高的

上述实例中,虽然我们创建了三个实例化对象,但是静态代码块中的内容只被执行了依次且是第一次被执行,这就说明静态代码块在类第一次使用时才会被加载,并且只会加载一次。

到此这篇关于Java 深入学习static关键字和静态属性及方法的文章就介绍到这了,更多相关Java static关键字 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2022-09-19

Java关键字详解之final static this super的用法

目录 1. final 关键字: 2. static 关键字: 3. this 关键字: 4. super 关键字: final,static,this,super 关键字总结 正文开始@Assassin 1. final 关键字: final 关键字,意思是最终的.不可改变的,初始化之后就不能再次修改 ,用来修饰类.方法和变量,具有以下特点: final 修饰的类不能被继承,final类中的所有成员方法都会被隐式的指定为 final 方法: final 修饰的方法不能被重写: final 修饰

详解java中的static关键字

Java中的static关键字可以用于修饰变量.方法.代码块和类,还可以与import关键字联合使用,使用的方式不同赋予了static关键字不同的作用,且在开发中使用广泛,这里做一下深入了解. 静态资源(静态变量与静态方法) 被static关键字修饰的变量和方法统一属于类的静态资源,是类实例之间共享的.被static关键字修饰的变量.方法属于类变量.类方法,可以通过[类名.变量名].[类名.方法名]直接引用,而不需要派生一个类实例出来. 静态资源分类存放的好处 JDK把不同的静态资源放在了不同的

Java基础之static关键字的使用讲解

static关键字 在Java中,static是静态修饰关键字.用于修饰类的成员方法.类的成员变量,另外可以编写static代码块来优化程序性能:被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问. static关键字的作用 方便在没有创建对象的情况下来进行调用方法或者变量.被static关键字修饰的方法或者变量不需要依赖对象来进行访问,只要类被加载了,就可以通过类名去访问. 1.static修饰成员方法 static修饰的方法称为静态方法

Java 反射修改类的常量值、静态变量值、属性值实例详解

前言 有的时候,我们需要修改一个变量的值,但变量也许存在于 Jar 包中或其他位置,导致我们不能从代码层面进行修改,于是我们就用到了下面的场景,通过反射来进行修改变量的值. 定义一个实体类 class Bean{ private static final Integer INT_VALUE = 100; } 利用反射修改私有静态常量方法 System.out.println(Bean.INT_VALUE); Field field = Bean.class.getField("INT_VALUE

java关键字static的使用详解

关键字 static 1. 概述 static 是一种修饰符 static 是Java中表静态的关键字 它可以修饰成员变量.成员方法.代码块 被static修饰的成员变量或成员方法,将不再依赖于对象的创建而去使用,而是依赖类的存在,成为类成员或类方法,是共享的(下面将会详细的解释). 2. static修饰成员变量 2.1 常见的修饰符 public 修饰符 private 修饰符 没有修饰符 static 修饰符(静态修饰符) class Test { // public 修饰符 public

java关键字final使用方法详解

它所表示的是"这部分是无法修改的".不想被改变的原因有两个:效率.设计.使用到final的有三种情况:数据.方法.类. 一. final数据 有时候数据的恒定不变是很有用的,它能够减轻系统运行时的负担.对于这些恒定不变的数据我可以叫做"常量"."常量"主要应用与以下两个地方:1.编译期常量,永远不可改变.2.运行期初始化时,我们希望它不会被改变.对于编译期常量,它在类加载的过程就已经完成了初始化,所以当类加载完成后是不可更改的,编译期可以将它代入

Java this 关键字的使用方法详解

Java this 关键字的使用方法详解 构造方法中的this关键字 构造方法是一个类的对象在通过new关键字创建时自动调用的,在程序中不能向调用其他方法一样通过方法名(也就是类名)来调用.但如果一个类有多个构造方法,可以在一个构造方法中通过this(paras-)来调用其他的构造方法. 使用this来调用其他构造方法有如下几个约束. 1) 只能在构造方法中通过this来调用其他构造方法,普通方法中不能使用. 2) 不能通过this递归调用构造方法,即不能在一个构造方法中通过this直接或间接调

java 深拷贝与浅拷贝机制详解

 java 深拷贝与浅拷贝机制详解 概要: 在Java中,拷贝分为深拷贝和浅拷贝两种.java在公共超类Object中实现了一种叫做clone的方法,这种方法clone出来的新对象为浅拷贝,而通过自己定义的clone方法为深拷贝. (一)Object中clone方法 如果我们new出一个新对象,用一个声明去引用它,之后又用另一个声明去引用前一个声明,那么最后的结果是:这两个声明的变量将指向同一个对象,一处被改全部被改.如果我们想创建一个对象的copy,这个copy和对象的各种属性完全相同,而且修

Java的数据类型和参数传递(详解)

Java提供的数据类型主要分为两大类:基本数据类型和引用数据类型. Java中的基本数据类型 名称 大小 取值范围 byte型 (字节) 8bit -128-127 (-2^7到2^7-1) short型 (短整型) 16bit -2^15到2^15-1 int型 (整形) 32bit -2^31到2^31-1 long型 (长整型) 64bit -2^63到2^63-1 float型 (单精度浮点型) 32bit double型 (双精度浮点型) 64bit char型 (字符型) 16bit

Java中的反射机制详解

Java中的反射机制详解 反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧! 一,先看一下反射的概念: 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. 反射是Java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接.但是反射使用不当会成本很高! 看概念很晕的,继续往下

Java枚举类型enum的详解及使用

 Java枚举类型enum的详解及使用 最近跟同事讨论问题的时候,突然同事提到我们为什么Java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?以前我们都是采用这种方式定义的,很少采用enum 定义,所以也都没有注意过,面对突入起来的问题,还真有点不太清楚为什么有这样的定义.既然不明白就抽时间研究下吧. Java 中的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型.要了解枚举类型,建议大

Java类的继承实例详解(动力节点Java学院整理)

一.你了解类吗? 在Java中,类文件是以.java为后缀的代码文件,在每个类文件中最多只允许出现一个public类,当有public类的时候,类文件的名称必须和public类的名称相同,若不存在public,则类文件的名称可以为任意的名称(当然以数字开头的名称是不允许的). 在类内部,对于成员变量,如果在定义的时候没有进行显示的赋值初始化,则Java会保证类的每个成员变量都得到恰当的初始化: 1)对于  char.short.byte.int.long.float.double等基本数据类型的

java 关键字static详细介绍及如何使用

java 关键字static 详解 一. static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个"伪全局"的概念,在Java中static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,当然也可以修饰代码块. Java把内存分为栈内存和堆内存,其中栈内存用来存放一些基本类型的变量.数组和对象的引用,堆内存主要存放一些对象.在JVM加载一个类的时候,若该类存在static修饰的成员变量和成员方

java并发编程之cas详解

CAS(Compare and swap)比较和替换是设计并发算法时用到的一种技术.简单来说,比较和替换是使用一个期望值和一个变量的当前值进行比较,如果当前变量的值与我们期望的值相等,就使用一个新值替换当前变量的值.这听起来可能有一点复杂但是实际上你理解之后发现很简单,接下来,让我们跟深入的了解一下这项技术. CAS的使用场景 在程序和算法中一个经常出现的模式就是"check and act"模式.先检查后操作模式发生在代码中首先检查一个变量的值,然后再基于这个值做一些操作.下面是一个