Java面试 - static 修饰的变量和方法有哪些特点?
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 修饰的变量和方法有哪些特点?的更多相关文章
- Java中static修饰符
public class StaticTest { static int i ; static int m=30; int j ; int k=25; static{ i=10; System.out ...
- JAVA_SE基础——34.static修饰成员变量
需求:描述一下学校的学生. 特点:都是中国人.... 测试代码1: class Student{ String name; String country = "中国"; //国籍 ...
- 实习第一天:static 声明的 变量和 方法
static 声明的 变量和 方法 既可以用类.变量或者类.方法来调用 order by表格:Store_Information表格 Name Sacles DAteAngeles 1500 19 ...
- Java中static修饰类的问题
Java中static修饰类的问题 众所周知,Java中static关键字可以修饰方法与变量: 修饰变量的时候,这个变量属于类变量,可以直接通过类名.变量名来引用. 修饰方法的时候可以直接通过类名.方 ...
- static 修饰的变量在程序中容易出现的问题
package lianxi; public class StaticTest { int a = 0; static int b =0; StaticTest(){ ...
- 测试 Java 类的非公有成员变量和方法
引言 对于软件开发人员来说,单元测试是一项必不可少的工作.它既可以验证程序的有效性,又可以在程序出现 BUG 的时候,帮助开发人员快速的定位问题所在.但是,在写单元测试的过程中,开发人员经常要访问类的 ...
- java 接口中的成员变量与方法
java接口中变量的默认修饰符为 public static final int i = 3; 相当于 public static final int i = 3; java接口中方法的默认修饰符为 ...
- 理解Java中的对象,变量和方法
1.对象的创建和销毁 1.1 对象的创建 这里只介绍创建对象与构造方法的关系 (1).每实例化一个对象就会自动调用一次构造方法,实质上这个过程就是创建对象的过程,准确的说,在Java语言中使用new操 ...
- java中static修改成员变量和函数和其他使用
一.通过static修饰的成员变量初始化只会初始化一次 //静态变量初始化只会初始化一次 public class zuishuai { public static void main(String[ ...
随机推荐
- luogu P1382 楼房
二次联通门 : luogu P1382 楼房 /* luogu P1382 楼房 线段树 + 扫描线 + 离散化 正解貌似是堆... MMP...二段式线段树各种错误... 离散化一下横坐标 扫描线扫 ...
- JavaBean转Map
1.需要的jar包 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava ...
- (转)外网如何访问docker容器
借鉴:https://blog.csdn.net/lvshaorong/article/details/69950694 Docker容器非常轻量,系统开销非常少,比VMware或者VirtualBo ...
- opencv VS C++ 配置
包含目录 $(OPENCV)\include\ $(OPENCV)\include\opencv\ $(OPENCV)\include\opencv2\ 即: D:\opencv\opencv\b ...
- Qt的插件开发
写代码都是从不会到会,那么写博客也是同样的道理.从不会到会最实用的办法就是模仿了.关于Qt的知识很多都是学习了CSDN的一位大神 一去二三里.关于Qt插件的开发,我们也从他的文章里面抽丝剥茧,把最本质 ...
- C#Winform ListView中没有Item双击事件的两种实现方法!
第一种: //if (this.listView1.FocusedItem != null) //{ // if (this.listView1.SelectedItems != null) // { ...
- Tomcat中配置URIEncoding="UTF-8"来处理中文的处理
Tomcat中配置URIEncoding="UTF-8"来处理中文的处理 打开 server.xml 文件,更改两个地方. 配置一:添加 URIEncoding="UTF ...
- OpenJudge计算概论-矩阵交换行
/*======================================================================== 矩阵交换行 总时间限制: 1000ms 内存限制: ...
- ubuntu系统调整时区和时间
date: 2019-05-30 10:14:23 author:headsen chen 个人原创博客,转录需要注明作者和出处. 1,安装ntpdate,同步标准时间 root@hk-confl ...
- 【转载】 第四范式首席科学家杨强:AlphaGo的弱点及迁移学习的应对(附视频)
原文地址: https://www.jiqizhixin.com/articles/2017-06-02-2 ============================================= ...