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[ ...
随机推荐
- Bacteria (Gym - 101911C)
2018-2019 ACM-ICPC, NEERC, Southern Subregional Contest, Qualification Stage Bacteria Gym - 101911C ...
- 一个Maven项目在eclipse中正常,但在IDEA中启动时报错
这个项目十有八九最初是在ecplise创建的,框架上十有八九整合了Mybatis,报的错误十有八九是 org.apache.ibatis.binding.BindingException: Inval ...
- nmon服务器性能结果报告分析
一.nmon命令 ./nmon_x86_64_centos7 -f -s 10 -c 60 -m ./log/ 命令的含义是: -f :按标准格式输出文件名称:<hostname>_YY ...
- Spring Cloud Gateway(九):网关过滤器 GatewayFilter
本文基于 spring cloud gateway 2.0.1 1.简介 GatewayFilter 网关过滤器用于拦截并链式处理web请求,可以实现横切的与应用无关的需求,比如:安全.访问超时的设置 ...
- iOS开发~防止navigation多次push一个页面
在点击push下一个页面时,因为各种原因,点一下cell或按钮没有响应,用户可能就多点几下,这时候会打开好几个一样的页面. 这是因为push后的页面有耗时操作或者刚好push到另一个页面时,另一个页面 ...
- Java核心复习 —— J.U.C 并发工具类
一.CountDownLatch 文档描述 A synchronization aid that allows one or more threads to wait until* a set of ...
- RK3288 修改ddr频率
转载请注明出处:https://www.cnblogs.com/lialong1st/p/10912334.html CPU:RK3288 系统:Android 5.1 RK3288 的 ddr 频率 ...
- js的一些兼容性易错的的问题
一.属性相关 我们通常把特征(attribute)和属性(property)统称为属性,但是他们确实是不同的概念,特征(attribute)会表现在HTML文本中,对特征的修改一定会表现在元素的out ...
- apache配置https重定向
apache配置https重定向 一.总结 一句话总结: 网上找不到答案的原因是因为没有精准的描述问题,没有把问题描述清楚:尽量把关键词描述清楚 1.apache将80端口重定向443的具体步骤(在 ...
- TynSerial流的序列(还原)
TynSerial流的序列(还原) procedure TForm1.ToolButton18Click(Sender: TObject); var serial: TynSerial; ms, ms ...