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可以修饰成员变量和成员方法

  1. 成员变量加static:根据具体事物,具体分析问题

    例如在定义事物的时候,多个事物之间是否有共性的数据,如果有请你将共性的数据定义为静态的成员变量。

  2. 成员方法加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笔记的更多相关文章

  1. c++ static笔记

    [转]http://www.cnblogs.com/zi-xing/p/4590282.html static的作用 在函数体,一个被声明为static的变量,在这一函数被调用的过程里,其数值维持不变 ...

  2. #Java编程思想笔记(一)——static

    Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...

  3. 读书笔记:const和readonly、static readonly 那些事

    C#中表示不变的量(常量)的两种形式:const 和readonly const 是静态常量 readonly 是动态常量 严格的来讲:const 应该称为常量 而readonly 则应称为只读变量. ...

  4. 《OOC》笔记(1)——C语言const、static和extern的用法

    <OOC>笔记(1)——C语言const.static和extern的用法 C语言中const关键字用法不少,我只喜欢两种用法.一是用于修饰函数形参,二是用于修饰全局变量和局部变量. 用c ...

  5. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

  6. Java开发笔记(五十五)关键字static的用法

    前面介绍嵌套类的时候讲到了关键字static,用static修饰类,该类就变成了嵌套类.从嵌套类的用法可知,其它地方访问嵌套类之时,无需动态创建外层类的实例,直接创建嵌套类的实例就行.其实static ...

  7. CoreJava笔记之JavaBean、静态方法static和final

    记住两句话: 1.属性是静态绑定到变量类型: 2.方法是动态绑定,由最终对象的方法决定 =============================== 关于JavaBean: 1.不是语法规则,是习惯 ...

  8. Java学习笔记之---static

    Java学习笔记之---static static不能修饰类,局部变量 (一)静态成员的特征 static+属性  静态属性 无论实例化出来多少个对象,都会共用同一块静态空间,类对象共享 静态成员从第 ...

  9. c++学习笔记之类和对象(三、static静态成员变量和静态成员函数)

    一.static静态成员变量 对象的内存中包含了成员变量,不同的对象占用不同的内存,这使得不同对象的成员变量相互独立,它们的值不受其他对象的影响.是有时候我们希望在多个对象之间共享数据,对象 a 改变 ...

随机推荐

  1. CentOS 7下启动、关闭、重启、查看MySQL服务

    1.启动命令 [root@xufeng Desktop]# service mysqld startRedirecting to /bin/systemctl start mysqld.service ...

  2. JS日期比较大小 给定时间和持续时间计算最终时间

       /* 往指定时间字符串上加时间间隔,获得新的时间字符串  * startDateStr:开始时间字符串,类似"2015-7-20 17:26:00"  * durationN ...

  3. java 扁平化输出json所有节点key/value

    本章主要介绍用java实现扁平化输出json所有节点key/value(包含所有内层子节点) 1.json结构 目的输出bill_list下的datalist里的子节点key/value 2.实现代码 ...

  4. 【openjudge】【递推】例3.4 昆虫繁殖

    [题目描述] 科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强.每对成虫过x个月产y对卵,每对卵要过两个月长成成虫.假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵 ...

  5. 【转】 java中Class对象详解和类名.class, class.forName(), getClass()区别

    Class对象的生成方式如下: 1.类名.class           说明: JVM将使用类装载器, 将类装入内存(前提是:类还没有装入内存),不做类的初始化工作.返回Class的对象 2.Cla ...

  6. Parameter server(参数服务器)

    特殊点在于参数服务器是节点存储参数的地方. 用于配置参数, 全局共享参数. 参数服务器使用互联网传输, 在节点管理器中运行, 实现整个通信过程. 1.命令行维护 load&&dump文 ...

  7. c实现 简单的文件管理 不含交互

    实现如下功能: 1.读取指定目录下的所有子目录和文件信息(比如:指定目录为C:/temp则把此目录 下的所有子目录下的文件信息读出来)2.在C盘创建一个以个人姓名命名的目录(比如:张三)3.在目录下创 ...

  8. android创建目录和文件和安装其它apk

    一.android下创建目录 File sd=Environment.getExternalStorageDirectory(); String path=sd.getPath()+"/no ...

  9. 填移动端坑系列一——如何让h5页面完美整屏显示

    原创哟,转载请附上本文连接(http://www.cnblogs.com/AliceX-J/p/6707908.html),作者 印前 后续更简单 前言: 最近让做一个h5的活动专题,便让我浩浩荡荡进 ...

  10. 三层架构搭建(asp.net mvc + ef)

    第一次写博客,想了半天先从简单的三层架构开始吧,希望能帮助到你! 简单介绍一下三层架构, 三层架构从上到下分:表现层(UI),业务逻辑层(BLL),数据访问层(DAL)再加上数据模型(Model),用 ...