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修饰的属性跟具体对象有关,在运行期初 ...
随机推荐
- 使用 fail2ban 防御 SSH 服务器的暴力破解攻击
对于SSH服务的常见的攻击就是暴力破解攻击——远程攻击者通过不同的密码来无限次地进行登录尝试.当然SSH可以设置使用非密码验证验证方式来对抗这种攻击,例如公钥验证或者双重验证.将不同的验证方法的优劣处 ...
- 斐讯K1 K2 开启Telnet
官方V21.4.5.5前的ROM,直接打开下边这个链接就直接开telnet了,然后就可以随便搞了 http://192.168.2.1/goform/gra_NTPSyncWithLocal?text ...
- hdoj:2051
#include <iostream> #include <string> #include <vector> #include <algorithm> ...
- Spring Boot 调用 MongoRepository时报org.springframework.beans.factory.NoSuchBeanDefinitionException错误的解决办法
这个问题整整折腾了我两天,现在记录下来,希望可以帮助和我一样,遇到相同问题的小伙伴. 项目是分层的(Intellij IDEA中的模块Module),有API(Core)层,Service&D ...
- oozie调度sqoop Job 数据库密码无法保存
问题描述 通过oozie调度sqoop作业时,需要输入数据库作业密码,但在sqoop元数据服务配置密码后,过一段时间会失效. 解决方法 将数据库密码写入HDFS文件,通过配置Sqoop job,实现传 ...
- Inside The C++ Object Model(二)
============================================================================2-0. 关键字explicit被引入C++,提 ...
- VBA 全局常量定义
Public Const INDEX As Integer = 16 Public Const RESULT_SHEET As String = "result" Public C ...
- exception ‘PHPExcel_Calculation_Exception‘ with message ‘粉丝数据!C2679 -> Formula Error: Operator ‘=‘ has no operands
导致问题原因可能是导出字段中包含有 ‘=’ ,解决办法:在字段前拼上一个半单引号. if(strpos($lists[$i-2][‘nickname‘],‘=‘) === 0){ $lists[$ ...
- IE8下动态生成option无法设置文本内容
问题: 1.在IE8下,JS动态添加 option 的时候,value 有值,但是文本内容添加不上 例:<option value="北京"></option&g ...
- pyqt4手动编写资源文件
资源文件resource.qrc为XML格式,格式较简单,可以手动编辑: <!DOCTYPE RCC><RCC version="1.0"> <qre ...