Java基础(十)--static关键字
static关键字通常应用在字段、方法、静态块,还有冷门一点的内容:静态内部类、静态导入
static字段:
static字段也就是静态变量,是属于类的,被所有的对象所共享,只有当类初次加载的时候保存到内存中,在内存中只保存一份
实例变量是属于对象的,在创建对象的时候进行初始化,每个对象的实例变量是互斥的,不会相互影响
PS:static是不允许用来修饰局部变量,无论是方法、静态块、代码块
static方法:
public class A{
private static int i = 1;
private String s;
private void del() {
System.out.println("del()");
add();
}
public static void add() {
System.out.println(s);
this.del();
System.out.println("add()"+ i);
}
}
因为静态方法是属于类的,不需要依赖对象去调用,内部是没有this的,所以静态方法中无法使用this,也无法调用非静态方法和变量,反
过来却可以的。但是如果在静态方法中new一个对象,然后调用非静态方法,是可以正常运行的
public static void add() {
A a = new A();
a.del();
System.out.println(a.s);
System.out.println("add()"+ i);
}
静态块:
静态块和静态变量一样在首次类加载的时候进行初始化,这是我们使用它的一个重要的原因
public class A{
private static int i = 1;
private String s = "aaa";
static {
System.out.println("A static block1");
}
private void del() {
System.out.println("del()");
add();
}
{
System.out.println("A block");
}
static {
i1 = 2;
// System.out.println(i1);
System.out.println("A static block2");
}
public static void add() {
System.out.println("add()");
}
private static int i1;
}
public class B extends A{
static {
System.out.println("B static block1");
}
{
System.out.println("B block");
}
public B() {
System.out.println("B Constructor");
}
static {
System.out.println("B static block2");
}
}
public class Test {
private static B b = new B();
public static void main(String[] args) {
new B();
A.add();
}
}
结果:
A static block1
A static block2
B static block1
B static block2
A block
B block
B Constructor
A block
B block
B Constructor
add()
静态块的特点:
1、静态块内部可以对定义在其后面的静态变量进行赋值,但是不能使用
2、静态块只会加载一次,按照代码定义顺序进行加载
3、类加载的顺序:父类静态块-->子类静态块-->父类代码块-->父类构造器-->子类代码块-->子类构造器
非静态块可以加载多次
静态内部类:
这部分内容可以参考我之前的内容:https://www.cnblogs.com/huigelaile/p/11009436.html,或者自行百度
静态导入:
之前static相关内容没想到过这个内容,但是在公众号有看到一篇关于面试的文章,面试官问关于static的内容,如果能够回答到静态导入,印象应该会很好。
这时候就能体现和其他面试者的区别了
格式:
import static 包名.类名.方法名
import static java.lang.System.*;
import static java.lang.Math.*; public class Test { public static void main(String[] args) {
out.println("abc");
System.out.println(round(1.2));
}
}
PS:jdk1.5出现的特性
1、静态导入的方法必须是静态的
2、静态导入可以不调用包名,直接使用包里的静态方法
Java基础(十)--static关键字的更多相关文章
- Java基础之static关键字的用法
Java中的static关键字主要用于内存管理.我们可以应用static关键字在变量.方法.块和嵌套类中. static关键字属于类,而不是类的实例. 静态(static)可以是: 变量 ...
- Java基础系列--static关键字
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8477914.html 一.概述 static关键字是Java诸多关键字中较常使用的一个,从 ...
- 【Java基础】static关键字相关
static关键字特点: 随着类的加载而加载. 优先于对象存在. 被所有对象共享 可以直接被类名调用. 使用注意: 静态方法只能访问静态成员. 但非静态成员可以访问静态成员. 静态方法中不能使用thi ...
- Java基础(二)-static关键字分析
static关键字是我们在编程中经常会使用到的,但有些可能只知其然而不知其所以然.下面介绍static关键字的作用再通过例子结合说明. static关键字共有五种作用(先说明static所修饰的不会改 ...
- java基础 2 static关键字
2. static关键字 变量:静态变量在内存中只存在一份,只在类第一次实例化时初始化一次,同时类所有的实例都共享静态变量,可以直接同过类名 来访问他. 方法:静 ...
- 【Java基础】static关键字的理解
修饰范围: 可以修饰成员变量和成员方法.静态的特点: A:随着类的加载而加载 B:优先于对象存在 C:被类的所有对象共享 这其实也是我们判断该不该使用静态的依据. 举例:饮水机和水杯的问题思考可通过类 ...
- 094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 04 static关键字(续)
094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)
093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 02 static关键字(中)
092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
随机推荐
- android 特殊符号开头的联系人归并至“#”下
在PeopleActivity界面.联系人的显示位置是由其display name的第一个字符决定的. 数字开头的联系人会显示在"#"这个header下. 中英文联系人会显示在&q ...
- 为axure生成的html站点添加关闭所有节点的功能
上一篇随笔:将Axure用于需求分析工具中,我分享了我做了一个axure部件,方便用axure中制作各种uml图. 用axure的朋友可能会发现一个问题,如下图,axure生成的html站点中所有的文 ...
- 蓝桥 ADV-233 算法提高 队列操作 【STL】
算法提高 队列操作 时间限制:1.0s 内存限制:256.0MB 问题描述 队列操作题.根据输入的操作命令,操作队列(1)入队.(2)出队并输出.(3)计算队中元素个数并输出. ...
- HttpClient-01基本概念
Http 协议应该是互联网中最重要的协议.持续增长的 web 服务.可联网的家用电器等都在继承并拓 展着 Http 协议,向着浏览器之外的方向发展. 虽然 jdk 中的 java.net 包中提供了一 ...
- VMware 虚拟机下挂载U盘
1.首先设置虚拟机为连接的可移动U盘 2.首先在虚拟机界面的情况下,插入U盘,U盘格式为fat32的 3.在mnt目录下新建一个文件夹usb 4.运用sudo fdisk -l /dev/sdb 来查 ...
- centos6之前版本的启动流程
centos6 之前的系统启动: linux启动流程: 1)加电自检 2)读取MBR,引导加载程序grub,完成grub的三个阶段. 3)加载系统内核kernel,执行系统初始化信息. 4)启动用户空 ...
- bzoj 1778: [Usaco2010 Hol]Dotp 驱逐猪猡【dp+高斯消元】
算是比较经典的高斯消元应用了 设f[i]为i点答案,那么dp转移为f[u]=Σf[v]*(1-p/q)/d[v],意思是在u点爆炸可以从与u相连的v点转移过来 然后因为所有f都是未知数,高斯消元即可( ...
- P3564 [POI2014]BAR-Salad Bar
传送门 我是来帮加藤大佬写题解的--全世界都没找到加藤大佬写法的说明--很难受-- 首先我们把\(p\)看成\(1\),\(j\)看成\(-1\),一个区间满足条件就意味着这个区间的所有前缀和都大于等 ...
- linux Java环境变了配置
1. sudo /etc/profile 2.安装截图配置 输入javac 进行验证
- PROTEUS快捷键与部分知识点
缩放 有以下几种方法对原理图进行缩放: 移动鼠标需要所放的地方,滚动鼠标滑轮进行缩放. 移动师表需要缩放的地方,按键盘F6放大,F7缩小 按下ShIFT键,鼠标左键拖拽出需要放大的区域,这叫SHIFT ...