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 改变 ...
随机推荐
- FreeMarker标签使用
FreeMarker标签使用 模板技术在现代的软件开发中有着重要的地位,主要用于view层的展示,freemarker是比较流行的一种. 一.FreeMarker模板文件主要有4个部分组成 ①文本,直 ...
- HBase的常用Java API
1. 创建HBase表的对象 HBase表的对项名字叫HTable,创建它的方法有很多,常见的有如下: org.apache.hadoop.hbase.client.HTable hTable = n ...
- BZOJ 2424 订货 最小费用流
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2424 题目大意: 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的 ...
- Python time.md
time模块 Comparing Clocks time.clock():在Unix 上,返回当前的处理器时间,以浮点数秒数表示. time.monotonic():返回一个单调时钟的值(在分秒内), ...
- 【LGP4886 】快递员
题目 好秒啊,真是一道神仙的点分治 于是我们来一个暴力的\(O(nlog^2n)\)的暴力统计吧 考虑计算每一个点作为快递中心时的答案 我们考虑在这个点成为分治重心时计算这个贡献 把这个贡献分成两部分 ...
- 【node.js】readline (逐行读取)
官网链接:http://nodejs.cn/api/readline#readline_readline require('readline') 模块提供了一个接口,用于从可读流(如 process. ...
- PAT乙级1023
1023 组个最小数 (20 分) 给定数字 0-9 各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1, ...
- HBase--大数据系统的数据库方案
本文主要围绕以下三方面来讨论HBase:是什么.为什么.怎样做. 1. 什么是HBase HBase是一个开源的.分布式的.非关系型数据库,其设计思想来源于Google的Big Table.通过集群管 ...
- 基于R语言的结构方程:lavaan简明教程 [中文翻译版]
lavaan简明教程 [中文翻译版] 译者注:此文档原作者为比利时Ghent大学的Yves Rosseel博士,lavaan亦为其开发,完全开源.免费.我在学习的时候顺手翻译了一下,向Yves的开源精 ...
- ADI高速信号采集芯片与JESD204B接口简介
ADI高速信号采集芯片与JESD204B接口简介 JESD204B接口 介绍: JEDEC Standard No. 204B (JESD204B)—A standardized serial int ...