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. 根据需求设计类并且画UML类图练习

    题目如下: // 打车时,可以打专车或者快车.任何车都有车牌号和名称// 不同车价格不同,快车每公里1元,专车每公里2元// 行程开始时,显示车辆信息// 行程结束时,显示打车金额(假定行程就5公里) ...

  2. easyui 对form扩展

    功能描述 easyui 中  combobox 多选赋值方法如下: $('#cbx').combobox('setValues', ['01','02']) 然而,业务中是以  “01,02” 的形式 ...

  3. loli的搜索测试-4

    其实这已经是第四次搜索测试了...只不过上两次测试时我不在学校,扔两个链接吧: 测试-2:https://www.luogu.org/blog/user35178/loli-di-sou-suo-ce ...

  4. 1031. [JSOI2007]字符加密【后缀数组】

    Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法 :把需要加密的信息排成一圈,显然,它们有很多种不同的读法.例如下图,可以读作 ...

  5. 【洛谷】【线段树】P1886 滑动窗口

    [题目描述:] 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. [输入格式:] 输入一共 ...

  6. shell基础--变量的数值计算

    变量的数值计算 1.$((表达式)) (1).实验1 [root@~_~ day4]# cat test.sh #!/bin/bash a=6 b=2 echo "a-b=$(($a-$b) ...

  7. Day14 集合(一)

    集合总体介绍 Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列 ...

  8. Django提示Unknown database处理方法

    cmd.exe运行别人的程序 C:\Python27\Python.exe E:\Django\Guest\Guest\manage.py runserver 提示 django.db.utils.I ...

  9. Spring源码分析(十一)bean的加载

    摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 经过前面的分析,我们终于结束了对XML配置文件的解析,接下来将会面临更大 ...

  10. 倒计数锁存器(CountDown Latch)和 CyclicBarrier(同步屏障)

    倒计数锁存器(CountDown Latch)是异常性障碍,允许一个或多个线程等待一个或者多个其他线程来做某些事情. public static long time(Executor executor ...