static final 内部类
1 static关键字
1.1 static关键字概述
类中的属性和方法都是通过创建本类对象调用的,当在调用对象的某个方法时,这个方法没有访问到对象的特有数据时,方法创建这个对象有些多余,可是不创建对象,方法又调用不了,这时能不能不创建对象,就实现调用方法呢?
可以通过static关键字来实现。static,静态修饰符,一般用来修饰类中成员变量和成员方法。
1.2 静态成员的特点
A:随着类的加载而加载,生命周期最长。
B:优先于对象存在。
C:被static修饰的成员变量属于类,不属于这个类的某个对象,多个对象共享同一个static成员变量。一个对象修改了static成员变量值,其他对象中的static成员变量值跟着改变
D:比非静态成员多了一种访问方式,可以通过类名直接调用。建议用类名.调用
//多个对象共享同一个static成员变量
class Demo {
public static int num = 100;
}
class Test {
public static void main(String[] args) {
Demo d1 = new Demo();
Demo d2 = new Demo();
d1.num = 200;
System.out.println(d1.num); //结果为200
System.out.println(d2.num); //结果为200
}
}
1.3 static使用场景
什么时候需要使用static修饰成员变量呢?
当类中的成员需要被所有对象共享时,用static修饰。不需要被共享时,就不用static修饰。简单说:共性用static修饰,特性不用static修饰。
举例:
班级的学生应该共用同一个班级编号
饮水机(用静态修饰)
水杯(不能用静态修饰)
什么时候使用static修饰成员方法?
静态的方法只能访问静态的成员,如果静态方法中引用到了静态的其他成员,那么这个方法需要声明为静态的方法。
1.4 静态只能访问静态
A:静态只能访问静态。静态方法只能访问静态的成员变量和方法
B:静态方法中不能使用this,super关键字。静态是随着类的加载而加载,this是随着对象的创建而存在。静态比对象先存在。
访问静态成员的格式:
类名.静态成员变量名
类名.静态成员方法名(参数)
对象名.静态成员变量名 ------不建议使用该方式,会出现黄线警告
对象名.静态成员方法名(参数) ------不建议使用该方式,会出现黄线警告
class Demo1 {
public static int num = 100;
public static void method(){
System.out.println("静态方法");
}
}
class Demo {
public static void main(String[] args) {
System.out.println(Demo1.num);
Demo1.method();
Demo1 d = new Demo1();
//d.num; //AssignmentOperator Expression
System.out.println(d.num);//黄线警告
d.method();//黄线警告
}
}
1.5 静态代码块在类中加载流程?
静态代码块--构造代码块--构造方法。
1.6 对象中的静态调用
在多态中,非静态编译看父类,运行看子类,父类没有编译失败。
但多态中的静态方法,编译看父类,运行仍然看父类。因为静态和对象没有关系,属于静态绑定。
public class Test{
public static void main(String[] args){
Fu f = new Zi();
f.show(); //父类的引用和父类的方法绑定,和对象无关,不会在运行时动态的执行子类特有的方法。
}
}
1.7 static定义静态常量
通常使用public static final修饰,此时变量名用全部大写,多个单词使用下划线连接。
格式:public static final 数据类型 变量名 = 值;
public static final String COMPANY_NAME = "博客园";
注意:
接口中的每个成员变量都默认使用public static final修饰。
所有接口中的成员变量已是静态常量,由于接口没有构造方法,所以必须显示赋值。可以直接用接口名访问。
interface Inter {
public static final int COUNT = 100;
}
访问接口中的静态变量:Inter.COUNT
2 final关键字
2.1 final关键字概述
类不想被继承,或类中部分方法不想让子类重写时,可以使用final关键字,final的意思为最终,不可变。
final修饰类,此类不能被继承。
final修饰方法,方法不能被重写
final修饰变量,变量就成了常量,只能被赋值一次,值不能被修改。常量的命名规范:要求大写。final int PI = 3.14;
final修饰基本类型变量,是值不能被改变
final修饰引用类型变量,是地址值不能被改变,对象中的属性可以改变
2.2 final修饰成员变量必须声明时就赋值吗?
修饰成员变量,需要在创建对象前赋值,否则报错。但是特殊情况:在构造方法可以给final修饰的变量赋值,当没有显式赋值时,多个构造方法的均需要为其赋值。
final修饰变量的初始化时机:
显式初始化
在对象构造完毕前即可
class Demo {
//直接赋值
final int m = 100;
//final修饰的成员变量,需要在创建对象前赋值,否则报错。
final int n;
public Demo(){
//可以在创建对象时所调用的构造方法中,为变量n赋值
n = 2016;//注释此处则报错:n没有被初始化
}
public static void main(String[] args) {
Demo demo = new Demo();
System.out.println(demo.m);
System.out.println(demo.n);
}
}
>>>
100
2016
static final 内部类的更多相关文章
- java基础之final/static/static final
一.final 1.final修饰变量(常量) final修饰的成员变量表示常量,一旦给定初值既无法改变 2.final方法 final修饰方法,表示该方法不能被子类重写 好处:比非final方法要快 ...
- Java 面向对象之static,final,匿名对象,内部类,包,修饰符
01final关键字概念 A: 概述 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承, 或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这 ...
- final 内部类 static
[Java中为什么会有final变量]: final这个关键字的含义是“这是无法改变的”或者“终态的”: 那么为什么要阻止改变呢? java语言的发明者可能由于两个目的而阻止改变: 1).效率问题: ...
- static、final、static final 用法
1.使用范围:类.方法.变量.2.区别和联系:2.1.static 含义:静态的,被 static 修饰的方法和属性只属于类不属于类的任何对象.2.2.static 用法:2.2.1.static 可 ...
- static int和static final int的区别
1.static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的区别是: 对于静态变量在内 ...
- Java中static、final、static final的区别(转)
说明:不一定准确,但是最快理解. final: final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变. final ...
- Java中static、final、static final的区别【转】
说明:不一定准确,但是最快理解. final: final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变. final ...
- String的实例化与static final修饰符
String两种实例化方式 一种是通过双引号直接赋值的方式,另外一种是使用标准的new调用构造方法完成实例化.如下: String str = "abcd"; String str ...
- static、final、static final的区别
final: final可以修饰属性,方法,类,局部变量(方法中的变量) final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变. final修饰的属性跟具体对象有关,在运行期初 ...
随机推荐
- iOS Message from debugger: Terminated due to memory issue ~解决方法
一.概念: /** 1.内存管理概念 2.查看其他技术分享结论 3.产生崩溃原因 4.解决方法以及思路 CSND: https://blog.csdn.net/shihuboke/article/de ...
- AICODER全栈实习报名
三期班开始报名 三期班定于6月17日开班,实习费用如下: 三个月模式实习费为12000元. 一个月模式实习费为4500元. AICODER提供后付费模式,报名参加AICODER的线下实习3个月模式的朋 ...
- OLT、分光器、ONU直接的关系
- maven添加jetty插件,同时运行多个实例
<plugins> <!-- jetty插件 --> <plugin> <groupId>org.eclipse.jetty</groupId&g ...
- Linux中rz和sz命令用法详解
http://www.111cn.net/sys/linux/67810.htm 在linux中rz 和 sz 命令允许开发板与主机通过串口进行传递文件了,下面我们就来简单的介绍一下rz 和 sz 命 ...
- Sword 内核队列二
#ifndef __GTC_FIFO_H_ #define __GTC_FIFO_H_ #ifndef GTC_MAX #define GTC_MAX(a,b) ((a) > (b) ? (a) ...
- 解决java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.robolectric.annotation.Config.application()
Deleting the .gradle folder worked for me too. Odd. Guessing some high level caching going on somewh ...
- PXE:终于成功启动 fedora live 了!
default menu.c32 timeout 1 label fedora29-live menu label fedora29-live from ftp kernel fedora29live ...
- Jquery实现轮播公告
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 写文件的工具类,输出有格式的文件(txt、json/csv)
import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io. ...