首页 > 编程语言 >Java入门:08.Java中的static关键字01

Java入门:08.Java中的static关键字01

时间:2024-09-14 08:51:22浏览次数:3  
标签:01 Java 对象 08 静态 static 静态方法 方法 属性

1 static关键字

  • 可以修饰属性变量,方法和代码段

    • static修饰的属性称为静态属性或类属性, 在类加载时就在方法区为属性开辟存储空间,无论创建多少个对象,静态属性在内存中只有一份。

      可以使用 类名.静态属性 的方式引用

    • static修饰的方法称为静态方法或类方法,在类加载时就在方法区中开辟存储空间,存储方法中信息,在调用静态方法时,不会默认传递this参数。

      可以使用 类名.方法() 的方式引用

    • static修饰的代码段称为静态代码段,在类加载时就自动执行,且仅执行一次。

      一般初始化操作可以写在静态代码段中。

1.1 对象属性与静态属性

对象属性:

class A{
    int i ;    
}
​
class Test{
    main(){
        A a= new A();
        a.i = 10 ;
    }
}

静态属性

class A{
    static int i ;
}
​
class Test{
    main(){ 
        A.j = 20 ;
    }
}
  • 对象属性:只有创建对象,才能引用。

  • 静态属性:可以通过类名直接引用。不需要创建对象。 通过对象也可以引用。

    类加载时开辟存储空间, 只有一份, 可以数据共享。

1.2 对象方法与静态方法

特点1

无论是静态方法还是对象方法,都是在类加载的时候,就在方法区中分配了存储空间

无论创建多少个对象,方法在内存中只存储一次。

特点2

在使用上, 对象方法的使用,必须先创建对象,才能调用。

而静态方法,可以通过类名直接调用

特点3

尽然对象方法在内存中只有1份,怎么做到不同对象调用,可以访问不同对象的属性呢?

  • 当通过对象调用对象方法时,会默认传递一个参数,这个实参就是当前对象的地址。这个形参就是this

  • 当通过类调用类方法时,就不会传递对象地址(此时没有对象),静态方法也没有this这个默认参数

简单来说,对象方法和静态方法的区别就在于是否需要引用对象自己的属性变量。

扩展1

静态方法中,不能使用this关键字。(压根就没有)

静态方法中只能直接使用静态成员(属性和方法),不能直接使用非静态成员。

在对象方法中,可以使用对象成员,也可以使用静态成员。

扩展2

对象方法中会有一个默认的参数叫this,存储的是调用当前方法的那个对象的地址

所以可以通过this,访问指定对象的属性。

默认情况下,访问对象的属性和其他方法时,jvm会自动的根据this的地址访问,而不需要编码时必须使用this关键字

class A{
    int i  ;
    public void t1(){
        i = 20 ; //等价于 this.i = 20 ;
    }
}

什么情况下必须写this呢?

  1. 局部变量与属性变量同名时,默认引用的是局部变量

  2. 调用重载的构造方法的时候

扩展3

方法到底是如何起作用的,以及有与属性同名的变量和没有同名变量的引用过程

标签:01,Java,对象,08,静态,static,静态方法,方法,属性
From: https://blog.csdn.net/a2018204587/article/details/142107747

相关文章

  • Java入门:08.Java中的static关键字02(拓展:单例模式)
    1.3对象代码段和静态代码段什么是代码段?就是个{}里面包含一堆代码代码段可以写在方法中,也可以写在方法外代码段可以方法中和方法外独立存在,也可以配合着分支结构和循环结构存在classA{ {   ..... }  publicvoidt1(){   { ......
  • Java EhCache 入门:从“Hello, EhCache!”到深入探索
    ......
  • Java 21的Logging的笔记
    JavaCoreLibrariesJavaLoggingJDK自带的日志记录框架,提供了基本功能,但在项目中没有实际使用过。通常会使用SLF4J和Log4j2或者Logback搭配。以maven管理的项目为例,修改pom.xml,增加如下配置:<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</art......
  • 《深入理解 Java 中的多线程基础(篇一)》
    多线程基础概述现代操作系统(Windows,macOS,Linux)都可以执行多任务。多任务就是同时运行多个任务。例如:播放音乐的同时,浏览器可以进行文件下载,同时可以进行QQ消息的收发。CPU执行代码都是一条一条顺序执行的,但是,即使是单核CPU,也可以同时运行多个任务。因为操作系统执行多任......
  • Luogu P10179 水影若深蓝 题解 [ 绿 ] [ 并查集 ] [ 构造 ]
    水影若深蓝:挺好的一道并查集构造题。观察不难发现“距离为\(2\)”这个条件我们可以通过黑白染色实现,我们把他们的中转点染成与他们相反的颜色,把这两个距离为\(2\)的点染成相同颜色。这个染色问题就很并查集。于是我们用并查集维护相同的种类。显然,当图上只有一个连通块的......
  • Java 21的Collections Framework的笔记
    JavaCoreLibrariesJavaCollectionsFrameworkCreatingUnmodifiableLists,Sets,andMaps相对于普通的容器类,不可变容器的对象,占用的内存少,内存利用更高效。在仅有只读操作时,使用不可变容器的对象,会有性能和空间方面的优势。不可变List的构建样例代码,如下:List<St......
  • Java基础内容集合
    这部分Java中的基础内容,集合,也叫做Java容器,用在很多的地方。集合是用来存储数据的,简称为容器,其中这里的存储指内存层面的存储,不是持久化存储。1.数组的特点:指定长度后,长度不可以更改声明了类型后,数组只能存放这个类型的数据。数组的查询效率高,删除、增加元素的效率低数组......
  • [Java基础]基本数据类型
    Java的基本数据类型包括以下8种:byte(1字节):用于表示整数值,取值范围为-128到127。short(2字节):用于表示整数值,取值范围为-32768到32767。int(4字节):用于表示整数值,取值范围为-2147483648到2147483647。long(8字节):用于表示整数值,取值范围为-9223372036854775808到92......
  • JavaScript语法入门六 数据类型
    数据类型JavaScript数据类型有8种,分别是number、bigint、string、boolean、null、undefined、symbol、object。JavaScript是一种弱类型语言,或者说动态类型语言。即每一个变量的类型在定义之后可变化的,JavaScript根据使用情况自动识别。number类型整数、浮点数。范围:常规的数字、Inf......
  • 78_JAVA_new的使用在JAVA与C++的异同之处
    Java和C++都使用new关键字来创建对象和分配内存,但它们在实现和使用上有一些重要的异同之处。以下是这两种语言中new使用的主要异同点:1. 内存管理Java:自动内存管理:Java使用垃圾回收(GarbageCollection,GC)机制来自动管理内存。对象的生命周期由垃圾回收器自动管理,......