Java深入讲解static操作符

目录
  • 前言
  • static修饰成员变量
  • 静态成员变量的特性
  • static修饰的成员方法
  • 静态方法特性

前言

这篇文章主要是从类中static修饰的成员变量,static修饰的成员方法这两个方面来讲解static,static成员变量的初始化会在代码块中讲解

static修饰成员变量

在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对象,是所有对象所共享的。

举个例子:

class Animal{
    String name;
    int age;
    static String type = "Dog";
    //构造方法
    public Animal(String name,int age){
        this.name = name;
        this.age = age;
    }
    public void SetAnimal(){
        System.out.println(this.name+" "+this.age+" "+type);
    }
}
public class Test {
    public static void main(String[] args) {
        Animal animal1 = new Animal("小白",1);
        Animal animal2 = new Animal("大黄",2);
        animal1.SetAnimal();
        animal2.SetAnimal();
    }
}

运行结果如下图所以:

我定义了一个动物类,成员变量有名字和年龄,还有一个被static修饰的变量type(种类),以及一个构造方法。我在主函数中创建了两个对象,对象的种类都是狗。并用构造方法为我创建的两个变量进行赋值。而种类type是我实现在定义定义变量的时候就进行初始化的,这种初始化变量叫做就地初始化。

注意: s t a t i c 修 饰 的 成 员 变 量 不 是 一 定 要 就 地 初 始 化 \color{#FF0000}{static修饰的成员变量不是一定要就地初始化} static修饰的成员变量不是一定要就地初始化

在我们用完static修饰完type之后,type就是静态成员变量,静态成员变量也叫类变量。没被static修饰的成员变量叫做普通成员变量。静态成员变量有个特点就是 不 属 于 对 象 \color{#FF0000}{不属于对象} 不属于对象。

什么是不属于对象?

也就是说static修饰过的变量,是不依赖对象的。举个例子:

class Animal{
    String name;
    int age;
    static String type = "Dog";
    //构造方法
    public Animal(String name,int age){
        this.name = name;
        this.age = age;
    }
    public void SetAnimal(){
        System.out.println(this.name+" "+this.age+" "+type);
    }
}
public class Test {
    public static void main(String[] args) {
        Animal animal1 = new Animal("小白",1);
        Animal animal2 = new Animal("大黄",2);
        System.out.println(animal1.type);
        System.out.println(Animal.type);
    }
}

仍然是上面的代码,我们都知道 对象名.成员变量可以访问成员变量,而访问static修饰的成员变量不需要创建对象,可以直接通过 类名.静态成员变量进行访问。运行结果结果如图所示:

两个打印的结果都是Dog,所以static修饰的变量不属于对象,因为不需要创建对象也可以访问。如果大家是想访问static修饰的变量,建议大家就直接用类名.静态成员变量就可以了,不建议使用对象.变量名进行访问。

静态成员变量的特性

  • 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
  • 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
  • 类变量存储在方法区当中
  • 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)
  • 可以不初始化,如果就地初始化了如果没被final修饰也是可以通过方法进行修改的

static修饰的成员方法

static修饰的成员方法和成员变量一样 ,不属于对象。static修饰的成员方法也叫类方法。也就是说,如果我想调用static修饰的成员方法直接用 类名.成员方法 就可以了。举个例子:

class Animal{
    String name;
    int age;
    static String type = "Dog";
    public static void staticFunc(){
        System.out.println("static修饰的成员方法");
    }
}
public class Test {
    public static void main(String[] args) {
        Animal animal1 = new Animal("小白",1);
        Animal animal2 = new Animal("大黄",2);
        Animal.staticFunc();
    }
}

我们平时写的方法一般都是static修饰的,为什么要用static修饰我相信你的心里应该也有答案了。

因为static修饰的方法不属于对象,不需要创建对象就可以直接使用。你也可以把static修饰的成员方法看成我们平时写的方法,只不过这是个在不同的类里面定义的一个成员方法罢了。

static修饰的成员方法是不依赖于对象的方法,所以在static修饰的方法中,不能直接访问普通的成员变量,因为普通的成员方法是需要依赖对象的。如果不创建对象,直接在static中修饰的成员方法中访问普通成员变量是不可以的。如果想要在static中修饰的成员方法中访问成员变量,有两种方法,第一种是直接在static修饰的成员方法中创建一个对象,这样就可以访问了。第二种是把创建好的对象作为static修饰成员方法的形参,这样也可以直接访问。

静态方法特性

  • 不属于某个具体的对象,是类方法
  • 可以通过对象调用,也可以通过类名.静态方法名(…)方式调用,更推荐使用后者
  • 不能在静态方法中访问任何非静态成员变量

到此这篇关于Java深入讲解static操作符的文章就介绍到这了,更多相关Java static内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java中的static关键字你了解多少

    目录 一.static关键字的用途 1)static方法 2)static变量 3)static代码块 二.static关键字的误区 1.static关键字会改变类中成员的访问权限吗? 2.能通过this访问静态成员变量吗? 3.static能作用于局部变量么? 三.常见的笔试面试题 1.下面这段代码的输出结果是什么? 2.这段代码的输出结果是什么? 3.这段代码的输出结果是什么? 总结 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “static方法就是没有th

  • 基于Java利用static实现单例模式

    目录 一.之前旧的写法 二.static代码块的效果 三.单例的另一种写法 四.总结 一.之前旧的写法 class Singleton{     private Singleton() {}     private static Singleton instance = null;     public synchronized static Singleton getInstance() {             if (instance == null) {                

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

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

  • Java中的static关键字修饰属性和方法(推荐)

    目录 static关键字 1.static修饰属性(静态属性) 1.1.哪些成员属性可以被static修饰. 1.2.静态属性的访问. 2.static关键字修饰方法 1.那些方法可以使用static修饰 2.常见的问题 static关键字 static关键词与对象无关.static关键字主要修饰四个部分的内容 这里我们主要介绍static修饰属性和修饰方法. 1.static修饰属性(静态属性) 1.1.哪些成员属性可以被static修饰. 我们把static修饰的属性称为静态属性,又叫类属性

  • Java 梳理总结关于static关键字常见问题

    目录 1.static是什么意思? 2.为什么使用static关键字? 3.Java中是否可以覆盖(override)一个private或者是static的方法? 4.是否可以在static环境中访问非static变量? 5.static静态方法能不能引用非静态资源? 6.static静态方法里面能不能引用静态资源? 7.非静态方法里面能不能引用静态资源? 8.java静态变量.代码块.和静态方法的执行顺序是什么? 1.static是什么意思? static 关键字表明一个成员变量或者是成员方法

  • 梳理总结Java static关键字的方法作用

    目录 概述 定义和使用格式 类变量 静态方法 调用格式 静态原理图解 静态代码块 概述 关于 static 关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属 于某个对象的.也就是说,既然属于类,就可以不靠创建对象来调用了. 定义和使用格式 类变量 当 static 修饰成员变量时,该变量称为类变量.该类的每个对象都共享同一个类变量的值.任何对象都可以更改 该类变量的值,但也可以在不创建该类的对象的情况下对类变量进行操作. 类变量:使用 static关键字修

  • Java超详细透彻讲解static

    目录 1. 引入 2. 理解 3. 使用 3.1 使用范围 3.2 static修饰属性 3.2.1 设计思想 3.2.2 分类 3.2.3 注意 3.2.4 举例 3.2.5 类变量内存解析 3.3 static修饰方法 3.3.1 设计思想 3.3.2 理解 3.3.3 使用 3.3.4 注意 3.3.5 举例 4. 注意 5. 单例 (Singleton)设计模式 5.1 概述 5.2 优点 5.3 单例设计模式-饿汉式 5.4 单例设计模式-懒汉式 5.5 应用场景 1. 引入 当我们编

  • 带你了解Java中Static关键字的用法

    目录 Java中Static关键字的一些用法详解 1. Static 修饰类属性,因为静态成员变量可以通过类名+属性名调用,非静态成员变量不能通过类名+属性名调用: 2. Static 修饰类方法,可以通过类名.静态方法名的方式调用静态方法,不可以用类名.静态方法名调用非静态方法: 3. 静态代码块,匿名代码块,构造函数.三者的调用顺序为(静态代码块(只调用1次) --> 匿名代码块 --> 构造函数). 总结 Java中Static关键字的一些用法详解 1. Static 修饰类属性,因为静

  • 解析Java中的static关键字

    一.static关键字使用场景 static关键字主要有以下5个使用场景: 1.1.静态变量 把一个变量声明为静态变量通常基于以下三个目的: 作为共享变量使用 减少对象的创建 保留唯一副本 第一种比较容易理解,由于static变量在内存中只会存在一个副本,所以其可以作为共享变量使用,比如要定义一个全局配置.进行全局计数.如: public class CarConstants { // 全局配置,一般全局配置会和final一起配合使用, 作为共享变量 public static final in

  • Java深入讲解static操作符

    目录 前言 static修饰成员变量 静态成员变量的特性 static修饰的成员方法 静态方法特性 前言 这篇文章主要是从类中static修饰的成员变量,static修饰的成员方法这两个方面来讲解static,static成员变量的初始化会在代码块中讲解 static修饰成员变量 在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对象,是所有对象所共享的. 举个例子: class Animal{ String name; int age; static

  • 详解Java的按位操作符

    Java的位操作符用来操作整数基本数据类型中的单个"比特"(bit),即代进制位.而我们知道比特就是0和1,那么,位操作就是对这些数据进行基本的操作.如果基本类型是char.byte或者short类型的数值进行移位处理,那么会转化成int类型,再进行移位的处理 Java的按位操作符 按位操作符会对两个参数对应的位执行布尔代数运算,并最终生成一个结果.这个操作符有与(&).非(~).或(|).异或(^).我们知道单位"比特"(bit),即代进制位,都是0和1,

  • java笔记学习之操作符

    0x001 算数运算符 int num1 = 1, num2 = 2; System.out.println(num1 + num2); // 3 System.out.println(num1 - num2); // -1 System.out.println(num1 / num2); // 0 System.out.println(num1 * num2); // 2 System.out.println(num1 % num2); //1 0x002 自增自减 System.out.pr

  • Java实例讲解文件上传与跨域问题

    目录 了解MultipartFile接口 文件上传业务代码 Controller类 Service类 修改nginx配置 如何绕过网关 1.在网关中配置白名单 2.在nginx做转发 解决上传文件出现跨域问题 写配置类CorsFilter 在nginx配置中配置请求实体大小 Java文件上传实例并解决跨域问题 目在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传功能的实现. 了解MultipartFile接口 我们实现文件的上传用到了Spring-

  • Java 深入浅出讲解代理模式

    目录 1.动态代理模式 2.JDK动态代理 3.JDK动态代理代码演示 1.动态代理模式 动态代理的特点: 当代理对象的时候,不需要实现接口 代理对象的生成,是利用JDK的API,动态的在内存中构建代理对象(需要我们指定创建代理对象/目标对象实现的接口的类型) 动态代理的别称:JDK代理.接口代理 2.JDK动态代理 类图: Java动态代理类位于java.lang.reflect包下 一般主要涉及到以下两个类: 1.Interface InvocationHandler : 该接口中仅定义了一

  • Java 深入浅出讲解泛型与包装类

    目录 1.什么是泛型 2.泛型的语法 3.泛型的上界 4.通配符 (1)通配符的上界 (2)通配符的下界 5.包装类 1.什么是泛型 泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型). 先看以下的例子: 我们以前学过的数组,只能存放指定类型的元素.如:int[] array=new int[10];String[] array=new String[10];而Object类是所有类的父类,那么我们是否可以创建Obj数组呢? class Mya

  • Java 详细讲解分治算法如何实现归并排序

    目录 1.什么是分治算法 分治法 基本思想 2.分治算法的体现--归并排序 归并排序 基本思想 3.代码实现 1.什么是分治算法 分治法 分治法,字面意思是"分而治之",就是把一个复杂的1问题分成两个或多个相同或相似的子问题,再把子问题分成更小的子问题直到最后子问题可以简单地直接求解,原问题的解即子问题的解的合并,这个思想是很多高效算法的基础,例如排序算法(快速排序,归并排序),傅里叶变换(快速傅里叶变换)等. 基本思想 分治法的基本思想:将一个难以直接解决的大问题,分割成一些规模较小

  • Java详细讲解不同版本的接口语法和抽象类与接口的区别

    目录 什么是接口? 接口的语法: (JDK7.0) 接口的语法: (JDK8.0) 接口的语法: (JDK9.0)—(私有方法) 接口的分类 常量接口: 空接口: 函数式接口: 什么是接口? 说到接口,USB大家肯定不陌生~接口是一种标准.规范.注意:接口一旦制定好,使用者和实现者都必须遵循的标准. 接口的语法: (JDK7.0) (1) 关键字:interface (2) 语法:  interface 接口名{} (3) 接口编译之后会生成对应的 .class文件 (4) 接口不能创建对象,但

随机推荐