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修饰的属性跟具体对象有关,在运行期初 ...
随机推荐
- jquery.cookie.js写入的值没有定义
这个是插件的基本语法,你写的没错,错就错在你肯定是在本地测试的,cookie是基于域名来储存的.意思您要放到测试服务器上或者本地localhost服务器上才会生效.cookie具有不同域名下储存不可共 ...
- Matlab信号处理基础
一. 简介 离散傅立叶.离散余弦和离散小波变换是图像.音频信号常用基础操作,时域信号转换到不同变换域以后,会导致不同程度的能量集中,信息隐藏利用这个原理在变换域选择适当位置系数进行修改,嵌入信息,并确 ...
- 100BASE-TX、100Base-FX等含义
100BASE-TX:双绞线,使用两对非屏蔽双绞线或两对1类屏蔽双绞线连接,传输距离100米 100Base-FX,是在光纤上实现的100 Mbps以太网标准,其中F指示光纤,IEEE标准为802.3 ...
- 判断当前viewcontroller是push还是present的方式显示的
网上的姿势,反正我用着不管用 最正确的姿势 NSArray *viewcontrollers = self.navigationController.viewControllers; if (view ...
- Kafka原理总结
Kafka Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实 ...
- java面试中被问到的问题
技术面 1) Spring 的注解有哪些? 2) 你如何理解 spring IOC 技术,如果不使用spring,你有哪些方式来加载 bean? 3) spring aop 的原理是什么?它是怎样一 ...
- koa文档参考
koa文档 简介 koa 是由 Express 原班人马打造的,致力于成为一个更小.更富有表现力.更健壮的 Web 框架.使用 koa 编写 web 应用,通过组合不同的 generator,可以免除 ...
- TortoiseGit功能介绍
TortoiseGit功能介绍 使用方便 强大的提交对话框 每个项目设置 最小日志消息长度,以避免意外提交空日志消息 用于拼写检查的语言 与问题跟踪系统集成 有用的工具 有多种语言版本 Tortois ...
- ux.form.field.Month 只能选年、月的时间扩展
效果如图,亲测6.2.1版本可用,用法同时间选择控件 //月弹窗扩展 //只选月 Ext.define('ux.picker.Month', { extend: 'Ext.picker.Month', ...
- Linux服务器中创建Oracle数据库实例
紧接上篇,在Linux服务器已经完成对Oracle数据库软件的安装后,接下来要创建Oracle实例,看图说话: [su – oracle echo $DISPLAY export DISPLAY=10 ...