Java Basic Notes——static修饰符

1.static

在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。这样做有什么意义呢?

在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是有种情况例外,就是该成员是用static声明的(在这里所讲排除了类的访问控制)。

static 是类方法,只用加载一次,但一直会占用内存。多了些资源消耗;而实例方法(非static)需要加载多次,但不会一直占用内存。少些资源消耗。一般来说, 在程序里面,一些使用频率高的方法就用static 方法、使用频率低的则用实例方法。

如果所有的方法都变成了静态方法的话,那Java语言就退化成过程语言了,因此绝对是不可以的。

典型的静态方法:

1 public static void main(String... args) {
2     // ...
3 }  

除了上面的main之外,还有,比如对类本身的一些操作,如:使用类的计数,或者工具类方法(Math.sin(), Thread.sleep())等等。

package test;

public class StaticTest {

    private static String s1;
    private String s2; 

    public static void main(String[] args) {
         s1 = "Hello, static";
         System.out.println(s1);
         StaticTest d = new StaticTest();
         d.s2 = "Hello, non-static!";
         System.out.println(s2);//这里会报错,提示把s2转换为static
       System.out.println(d.s2);//这个可以打印,实例方法必须通过对象引用

}

}
时间: 2024-12-19 07:10:13

Java Basic Notes——static修饰符的相关文章

java面向对象之static修饰符

在摆实例之前,先搞一些总结上去.... static(静态\修饰符) 1. static修饰成员变量 :如果有数据需要被共享给所有对象使用时,那么就可以使用static修饰. 静态成员变量的访问方式: 方式1: 可以使用对象进行访问. 格式: 对象.变量名. 方式二: 可以使用类名进行访问. 格式: 类名.变量名; 注意: 1. 非静态的成员变量只能使用对象进行访问,不能使用类名进行访问. 2. 千万不要为了方便访问数据而使用static修饰成员变量,只有成员变量的数据是真正需要被共享的时候 才

java final .static修饰符

static静态修饰符(使用static修饰符修饰的成员变量.常量.和成员方法成为静态变量.常量和方法,他们统称为静态成员,归整个类所有,不依赖于类的特定实例,被类的所有实例共享,只要这个类被加载,JVM就可以根据类名在运行时数据区的方法区找到他们) 静态变量 对于静态变量,运行时,JVM只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配.在类的内部,可以在任何方法内直接访问静态变量:在其他类中,可以通过类名访问该类中的静态变量. 静态变量可以被类的所有实例共享,因此静态变量可以作

1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用

1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用 成员变量(属性)①类中添加成员变量 访问修饰符 类型 变量名 private String name ②实例化对象调用类的构造方法类构造对象,Teacher one = new Teacher(): 有static的可以直接调用,因为static是类级别的 ③JavaBean里边一般规则应该有公共的无参构造应该有符合命名规范的get/set方法 ④对象的回收:没有任何引用指向该对象时,GC会回收 主动回收:对象 = nu

关于Java语言中那些修饰符

一.在java中提供的一些修饰符,这些修饰符可以修饰类.变量和方法,在java中常见的修饰符有:abstract(抽象的).static(静态的).public(公共的).protected(受保护的).private(私有的).synchronized(同步的).native(本地的).transient(暂时的).volatile(易失的).final(不可改变的) 二.修饰顶层类的修饰符包括abstract.public和final,而static.protected和private不能修

详解Java中的访问控制修饰符(public, protected, default, private)

Java中的访问控制修饰符已经困惑笔者多时,其中较复杂的情况一直不能理解透彻.今天下定决心,系统.全面地研究Java中的访问控制修饰符的所有方面,并整理成这篇文章,希望有同样疑惑的读者读完后能有所收获.如果文章中出现错误,欢迎评论指出,共同交流~ 说在前面:这篇文章只研究Java中访问控制修饰符声明类的变量/方法的情况. 先抛出结论: * 成员变量/方法的访问权限 *                                        private        default  

Java语言中的修饰符

类.方法.成员变量和局部变量的可用修饰符 修饰符 类 成员方法 构造方法 成员变量 局部变量 abstract Y Y _ _ _ static _ Y _ Y _ public Y Y Y Y _ protected _ Y Y Y _ private _ Y Y Y _ synchronized _ Y _ _ _ native _ Y _ _ _ transient _ _ _ Y _ volatile _ _ _ Y _ final Y Y _ Y Y 1.访问控制修饰符: Java语言

Java面向对象编程之Java语言中的修饰符

近日,读了孙卫琴老师的<Java面向对象编程>一书,心中颇有些感悟,想着将其记录下来. Java中的修饰符 在Java语言中,有这样一些单词(说得再准确点儿,应该是形容词):abstract(抽象的).static(静态的).public(公共的).protected(受保护的).private(私有的).synchronized(同步的).native(本地的).transient(暂时的).volatile(易失的)和final(不可改变的),它们被成为修饰符,这些修饰符可以修饰类.变量和

Java基础——protected访问修饰符探讨

Java基础——protected访问修饰符探讨 根据官方说法:(如图) protected修饰符是可以修饰其他包中的自损类的,但是我做了个实验,结果发现了一个有趣的现象! 具体请往下看: package com.demo1; public class Demo1 { protected Demo1(){ System.out.println("protected"); } protected void function(){ System.out.println("受保护方

java(8)控制逻辑 修饰符

包 package 目录概念,箱子 package放在源文件最前面,package语句只能有一个,多层用“.”分割 如何使用package, 同包类直接引用,不同包import 包名.*; import 包名.类名 import要在package之后引用 静态引入: 引入包中的静态成员变量和静态方法,static import static 包名.aaa.*; import static 包名.aaa.方法名称: 类的访问级别:public(跨包),默认访问级别(包内),protect,priv