static笔记
1. static概括
当在定义类的时候,类中都会有相应的属性和方法。而属性和方法都是通过创建本类对象调用的。当在调用对象的某个方法时,这个方法没有访问到对象的特有数据时,方法创建这个对象有些多余,我们可以通过static关键字来实现。static它是静态修饰符,一般用来修饰类中的成员
被静态修饰的数据,不再属于对象的特有内容,而是对象的共享内容

2. static特点
1. 被static修饰的成员变量属于类,不属于这个类的某个对象。
也就是说,多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享同一个static成员变量

2.被static修饰的成员可以并且建议通过类名直接访问
class Demo {
//静态成员变量
public static int num = 100;
//静态方法
public static void method(){
System.out.println("静态方法");
}
}
class Test {
public static void main(String[] args) {
System.out.println(Demo.num);
Demo.method();
}
}
3. static注意事项
1. 静态内容是优先于对象存在,只能访问静态,不能使用this/super。静态修饰的内容存于静态区
原因:this表示本类的对象引用,静态优先于对象,没有对象this什么?super也是同理(表示父类的对象)
简单来说,把 静态比喻为前人或先人,非静态比喻为后人,后人可以使用前人留下来的技术,但前人并不知道后人会有什么技术,关键点就在于生命周期的不同。
2. static 修饰到底什么时候使用?该应用与什么场景?
static可以修饰成员变量和成员方法
成员变量加static:根据具体事物,具体分析问题
例如在定义事物的时候,多个事物之间是否有共性的数据,如果有请你将共性的数据定义为静态的成员变量。
成员方法加static:跟着变量走
如果方法,没有调用过非静态成员,就应该将方法定义为静态。
3. 定义静态常量
定义格式(变量名要全大写):
public static final 数据类型 变量名 = 值;
例如:
public static final String CNBLOGS_NAME = "薄荷叶cc";
4. static面试题
面试题一
问:static 关键字是什么意思?Java 中是否可以覆盖(override) 一个 private 或者是 static 的方法?
答案:
static关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。简单来说就是:方便在没有创建对象的情况下来进行调用其方法或变量。
Java 中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而 static 方法是编译时静态绑定的。static 方法跟类的任何实例都不相关,所以概念上不适用。
解析:
答案就是概括一下static和static的生命周期
面试题二
这个static面试题是我从CSDN上面找的,觉得挺有参考价值——原链接
问:以下代码输出的结果为?
public class Test {
Person person = new Person("Test");
static{
System.out.println("test static");
}
public Test() {
System.out.println("test constructor");
}
public static void main(String[] args) {
new MyClass();
}
}
class Person{
static{
System.out.println("person static");
}
public Person(String str) {
System.out.println("person "+str);
}
}
class MyClass extends Test {
Person person = new Person("MyClass");
static{
System.out.println("myclass static");
}
public MyClass() {
System.out.println("myclass constructor");
}
}
答案:
test static
myclass static
person static
person Test
test constructor
person MyClass
myclass constructor
解释:
首先加载Test类,因此会执行Test类中的static块。(test static)
接着执行new MyClass(),而MyClass类还没有被加载,因此需要加载MyClass类。
在加载MyClass类的时候,发现MyClass类继承自Test类,但是由于Test类已经被加载了,所以只需要加载MyClass类(若没有加载,要先加载完父类),那么就会执行MyClass类的中的static块。(myclass static)
在加载完之后,就通过构造器来生成对象。
而在生成对象的时候,必须先初始化父类的成员变量,因此会执行Test中的Person person = new Person()
而Person类还没有被加载过,因此会先加载Person类并执行Person类中的static块(person static),接着执行父类的构造器。
完成了父类的初始化(person Test+test constructor),然后就来初始化自身了,因此会接着执行MyClass中的Person person = new Person()
最后执行MyClass的构造器。(person MyClass+myclass constructor)
5. 心得体会
这个本人的第一篇博客,写博客的主要目的是为了分享和记录自己学习的成果,为了写这一篇博客,我第一次了解到markdown,为了使用markdown,下载了Typora,还特意去简书上弄了一个自己的图床,在笔记已经写好的情况下花了一晚上时间,整个学习过程让我受益良多。
该篇用于记录和分享我总结的笔记,若有不正之处,希望谅解并欢迎批评指正。
static笔记的更多相关文章
- c++ static笔记
[转]http://www.cnblogs.com/zi-xing/p/4590282.html static的作用 在函数体,一个被声明为static的变量,在这一函数被调用的过程里,其数值维持不变 ...
- #Java编程思想笔记(一)——static
Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...
- 读书笔记:const和readonly、static readonly 那些事
C#中表示不变的量(常量)的两种形式:const 和readonly const 是静态常量 readonly 是动态常量 严格的来讲:const 应该称为常量 而readonly 则应称为只读变量. ...
- 《OOC》笔记(1)——C语言const、static和extern的用法
<OOC>笔记(1)——C语言const.static和extern的用法 C语言中const关键字用法不少,我只喜欢两种用法.一是用于修饰函数形参,二是用于修饰全局变量和局部变量. 用c ...
- 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类
static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...
- Java开发笔记(五十五)关键字static的用法
前面介绍嵌套类的时候讲到了关键字static,用static修饰类,该类就变成了嵌套类.从嵌套类的用法可知,其它地方访问嵌套类之时,无需动态创建外层类的实例,直接创建嵌套类的实例就行.其实static ...
- CoreJava笔记之JavaBean、静态方法static和final
记住两句话: 1.属性是静态绑定到变量类型: 2.方法是动态绑定,由最终对象的方法决定 =============================== 关于JavaBean: 1.不是语法规则,是习惯 ...
- Java学习笔记之---static
Java学习笔记之---static static不能修饰类,局部变量 (一)静态成员的特征 static+属性 静态属性 无论实例化出来多少个对象,都会共用同一块静态空间,类对象共享 静态成员从第 ...
- c++学习笔记之类和对象(三、static静态成员变量和静态成员函数)
一.static静态成员变量 对象的内存中包含了成员变量,不同的对象占用不同的内存,这使得不同对象的成员变量相互独立,它们的值不受其他对象的影响.是有时候我们希望在多个对象之间共享数据,对象 a 改变 ...
随机推荐
- 4-2 R语言函数 apply
#apply函数,沿着数组的某一维度处理数据 #例如将函数用于矩阵的行或列 #与for/while循环的效率相似,但只用一句话可以完成 #apply(参数):apply(数组,维度,函数/函数名) & ...
- linux 用户和组及文件权限的相关内容
1.添加用户(只有管理员用户或具有管理员权限的用户可以添加删除用户) useradd 用户名 (laoda) 新创建用户后home下会多一个laoda的目录 ,此目录中存放的是laoda用户相关的 ...
- c# datetime用法总结
备忘:YYYY-mm-dd HH:MM:SS部分解释 d 月中的某一天.一位数的日期没有前导零. dd 月中的某一天.一位数的日期有一个前导零. ddd 周中某天的缩写名称,在 Abbreviated ...
- SVN服务器安装与本地连接
SVN服务器安装与本地连接 系统环境 Centos7 查看是否安装了低版本SVN [root@svn-server ~]# rpm -qa subversion 卸载旧版本SVN [root@svn- ...
- 机器学习中的特征缩放(feature scaling)
参考:https://blog.csdn.net/iterate7/article/details/78881562 在运用一些机器学习算法的时候不可避免地要对数据进行特征缩放(feature sca ...
- PAT乙级1019
1019 数字黑洞 (20 分) 给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直 ...
- 郑重推荐开源CANopen协议栈CANFestival(LGPL许可)!!!!!!!!
郑重推荐开源CANopen协议栈CANFestival(LGPL许可)!!!!!!!!(这条文章已经被阅读了 次) 时间:2010/03/04 06:47am 来源:winshton [这个贴子最后由 ...
- 你都用python来做什么?
首页发现话题 提问 你都用 Python 来做什么? 关注问题写回答 编程语言 Python 编程 Python 入门 Python 开发 你都用 Python 来做什么? 发现很 ...
- 使用Navicat for Oracle工具连接oracle
使用Navicat for Oracle工具连接oracle的 这是一款oracle的客户端的图形化管理和开发工具,对于许多的数据库都有支持.之前用过 Navicat for sqlserver,感觉 ...
- linux文件系统初始化过程(1)---概述
术语表: struct task:进程 struct mnt_namespace:命名空间 struct mount:挂载点 struct vfsmount:挂载项 struct file:文件 st ...