1、static修饰的变量和方法,在类加载时即被初始化,可直接通过类名.变量名和类型.方法名进行调用。

2、static修饰的变量,在类加载时会被分配到数据区的方法区。类的实例可共享方法区中的变量。如果static修饰的变量发生改变,那么所有类实例引用的变量都会一起发生改变。

3、static修饰的方法中不能使用this或super,static修饰的方法属于类的方法,而this或super只是对象的方法。

4、static修饰的方法不能引用非static 修饰的变量, 在类加载过程中,当static修饰的方法加载完成时,非static修饰的变量

还未加载,所以无法引用非static修饰的变量。

5、非static修饰的方法可以引用static 修饰的变量,在类加载过程中,static修饰的变量优先完成加载,所以当非static修饰的方法

完成加载后可以引用static 修饰的变量。

举例

假设Student 类有static 修饰的变量name和方法getName(String name), 那么是否可以直接通过类名调用呢?

public class Student {
private static String name;
private static void getName(){
System.out.println(name);
}
public static void main(String[] args) {
Student.name = "Jack Ma";
Student.getName();
}
}

运行结果:

Jack Ma

可见,static 修饰的变量和方法是可以直接通过类名调用的。

那么,在static 修饰的main方法内, Student 对象s1 和s2 是否可以直接调用static 修饰的变量和方法呢?

public class Student {
private static String name;
public static void getName(){
System.out.println(name);
}
public static void main(String[] args) {
Student s1 = new Student();
s1.name = "大黄";
s1.getName();
Student s2 = new Student();
s2.name = "二黄";
s2.getName();
}
}

运行结果:

大黄
二黄

从运行结果来看,在static 修饰的main方法内,Student 对象s1 和s2 是可以直接调用static 修饰的变量和方法。

如果此时修改static 修饰的变量name方法,那么Student对象s1, s2调用的变量name是否也会一起被修改呢?

public class Student {
private static String name;
public static void getName(){
System.out.println(name);
}
public static void main(String[] args) {
Student s1 = new Student();
// 修改static 修饰的变量name
s1.name = "Jack";
s1.getName();
Student s2 = new Student();
s2.getName();
}
}

运行结果:

Jack
Jack

从运行结果来看,当对象s1修改了在方法区(数据共享区)的static变量name,那么对象s2调用的static变量name必然会一起被修改。

在static修饰的方法中是否可以应用this呢?



在static修饰的方法中是否可以应用super呢?



在static修饰的方法是否能引用非static 修饰的变量呢?



非static修饰的方法是否能引用static修饰的变量呢?

public class Student {
private static String name;
private int age;
public void getInfo(){
// 非static 方法getInfo()引用static修饰的变量name
System.out.println("姓名:"+ name + ", 年龄" + age);
}
public static void main(String[] args) {
Student s1 = new Student();
//通过类名Student直接调用static 变量 name
Student.name = "Jack Ma";
s1.age = 19;
s1.getInfo();
}
}

运行一下

姓名:Jack Ma, 年龄19

可见,非static修饰的方法可以引用static修饰的变量

Java面试 - static 修饰的变量和方法有哪些特点?的更多相关文章

  1. Java中static修饰符

    public class StaticTest { static int i ; static int m=30; int j ; int k=25; static{ i=10; System.out ...

  2. JAVA_SE基础——34.static修饰成员变量

    需求:描述一下学校的学生.  特点:都是中国人.... 测试代码1: class Student{ String name; String country = "中国"; //国籍 ...

  3. 实习第一天:static 声明的 变量和 方法

    static 声明的 变量和 方法   既可以用类.变量或者类.方法来调用 order by表格:Store_Information表格 Name Sacles DAteAngeles 1500 19 ...

  4. Java中static修饰类的问题

    Java中static修饰类的问题 众所周知,Java中static关键字可以修饰方法与变量: 修饰变量的时候,这个变量属于类变量,可以直接通过类名.变量名来引用. 修饰方法的时候可以直接通过类名.方 ...

  5. static 修饰的变量在程序中容易出现的问题

    package lianxi; public class StaticTest {    int a = 0;    static int b =0;    StaticTest(){         ...

  6. 测试 Java 类的非公有成员变量和方法

    引言 对于软件开发人员来说,单元测试是一项必不可少的工作.它既可以验证程序的有效性,又可以在程序出现 BUG 的时候,帮助开发人员快速的定位问题所在.但是,在写单元测试的过程中,开发人员经常要访问类的 ...

  7. java 接口中的成员变量与方法

    java接口中变量的默认修饰符为 public static final int i = 3; 相当于 public static final int i = 3; java接口中方法的默认修饰符为 ...

  8. 理解Java中的对象,变量和方法

    1.对象的创建和销毁 1.1 对象的创建 这里只介绍创建对象与构造方法的关系 (1).每实例化一个对象就会自动调用一次构造方法,实质上这个过程就是创建对象的过程,准确的说,在Java语言中使用new操 ...

  9. java中static修改成员变量和函数和其他使用

    一.通过static修饰的成员变量初始化只会初始化一次 //静态变量初始化只会初始化一次 public class zuishuai { public static void main(String[ ...

随机推荐

  1. TensorFlow(十八):从零开始训练图片分类模型

    (一):进入GitHub下载模型-->下载地址 因为我们需要slim模块,所以将包中的slim文件夹复制出来使用. (1):在slim中新建images文件夹存放图片集 (2):新建model文 ...

  2. (转)实验文档5:企业级kubernetes容器云自动化运维平台

    部署对象式存储minio 运维主机HDSS7-200.host.com上: 准备docker镜像 镜像下载地址 复制 12345678910111213141516 [root@hdss7-200 ~ ...

  3. mac 登陆phpmyadmin 提示 mysqli_real_connect(): (HY000/2002): No such file or directory

    我们将下载的phpmyadmin 放在apache目录中,进入phpmyadmin目录, 首先将这个目录中的配置文件改名 sudo mv config.sample.inc.php config.in ...

  4. ZR#959

    ZR#959 解法: 对于一个询问,设路径 $ (u, v) $ 经过的所有边的 $ gcd $ 为 $ g $,这可以倍增求出. 考虑 $ g $ 的所有质因子 $ p_1, p_2, \cdots ...

  5. Selenium 常用JS

    滑动scroll: window.scrollTo(0,document.body.scrollHeight);

  6. CentOS 7 安装MySQL8

    安装 下载Linux对应的MySQL https://dev.mysql.com/downloads/mysql/ CentOS选择Red Hat Enterprise Linux 在/usr/loc ...

  7. 在主机上如何构建openwrt的编译环境?

    答: 请参考官方文档

  8. 放射渐变RadialGradient

    public RadialGradient(float centerX, float centerY, float radius, int[] colors, float[] stops, TileM ...

  9. Java8 新特性之Stream

    1.Student package com.elk.log.myTest; public class Student implements Comparable<Student> { /* ...

  10. 0.9.0.RELEASE版本的spring cloud alibaba nacos实例

    简而言之,nacos与eureka的不同之处有三:后台老板.部署方式.功能.nacos是阿里的,eureka是奈飞的:nacos有自己的安装包,需要独立部署,eureka仅作为一个服务组件,引入jar ...