final&static
final
1.final修饰类,那么该类不能有子类,那么也就没有子类重写父类的方法,也就没有多态
2.final修饰成员变量,那么成员变量要么显式赋值(用第一种),要么在构造方法中赋值
无论哪一种,都要手动赋值
class Person{
private final int age=10;//显式赋值
private final String name;
public Person(){
this.name="张三";//构造方法中赋值
}
}
3.final修饰局部变量,局部变量只能被赋值一次
4.final修饰方法,不能子类重写
final不能与abstract关键字共存,如果修饰抽象方法,该方法不能被重写,那么抽象方法没有存在意义
static
静态修饰的成员变量的特点
a. class Chinese{
private final static String cn="中国";//所有的中国人共享一份国籍cn
//final 与 static 前后顺序无所谓
private static String skin;
}
被静态修饰的成员变量被该类所有的对象共享,如果其中一个对象改变了共享数据,
其它对象方法访问的是改变后的
new Chinese().skin="黄种人";
System.out.println(new Chinese().skin);//黄种人,两个对象共享skin
b.静态成员随着类的加载(new该类的对象或者通过类名来调用静态方法或者该类被继承)而加载
放在方法区,具有默认值(和成员变量各类型的默认值相同)
c.通过 类名.静态成员 直接访问
静态成员&非静态成员&局部变量
1.内存的区别:
非静态成员:和对象同生共死(对象存在的时候,这个非静态成员也存在,存在于堆中有默认值),当对象被GC(垃圾回收器),回收走的时候,这个非静态成员也会销毁
静态成员:和类同生共死(静态成员随着类的加载(new该类的对象或者通过类名来调用静态方法或者该类被继承)而加载
放在方法区,具有默认值(和成员变量各类型的默认值相同))
局部变量:和方法同生共死,随着方法的调用而进入到方法栈中,当方法执行结束,方法弹栈,该方法中所有的局部变量都要被销毁
2.默认值:
成员变量和静态变量才有默认值,局部变量要想使用(打印)必须被赋值
3.局部变量不能被static修饰,static只修饰成员位置(变量,方法,内部类),可以用final修饰符
静态成员的访问的注意事项
a.静态成员只能直接访问静态成员,不能直接访问非静态成员
class Person{
private static String cn="中国";
public static void method(){
System.out.println(cn);//静态可以直接访问静态
//method2();//静态不能直接访问非静态
Person p=new Person();
p.method2();//因为对象已经存在,可以访问非静态成员
}
public void method2(){
System.out.println(cn);//因为静态是先存在(祖宗),method2方法是非静态,后存在(子孙)
//那么后存在的(子孙)可以访问先存在(祖宗)
}
}
b.静态方法没有this和super关键字
class Animal{
int i=10;
}
class Person extends Animal{//人是哺乳动物的一种
private static String cn="中国";
private int i=3;
public static void method2(){
//System.out.println(this.i);//假设method2()中有this关键字,this一定会指向某个对象,但是当执行Person.method2()的时候,通过类名.静态方法调用
//此时还没有创建任何对象,此时发生矛盾
//System.out.println(super.i);//假设method2()中有super关键字,super可以访问父类的属性,但是父类中的属性是在子类对象中存在的,
//但是当执行Person.method2()的时候,通过类名.静态方法调用
//此时还没有创建任何子类对象,无法访问父类成员,发生矛盾
}
}
System.out.println(Person.method2());
final&static的更多相关文章
- java修饰符public final static abstract transient
JAVA 修饰符public final static abstract transient 关键字: public final static abstract ... 1.public prot ...
- JAVA 构造器, extends[继承], implements[实现], Interface[接口], reflect[反射], clone[克隆], final, static, abstrac
记录一下: 构造器[构造函数]: 在java中如果用户编写类的时候没有提供构造函数,那么编译器会自动提供一个默认构造函数.它会把所有的实例字段设置为默认值:所有的数字变量初始化为0;所有的布尔变量设置 ...
- 关于final static修饰的常量部署后没有更新的问题
出现问题的场景是这样的: 项目中有个专门放流程Key值常量的类FlowConstants.java,其中这些常量都用了final static 修饰.某天因为修改了流程,相应的key值也改变了,所以直 ...
- Java中的内存处理机制和final、static、final static总结
Java中的内存处理机制和final.static.final static总结 装载自:http://blog.csdn.net/wqthaha/article/details/20923579 ...
- Java final static关键字
Java中的final关键字 使用 final 关键字做标识有 “最终的” 含义. final 可以修饰 类.方法.属性.变量 final 修饰类: 则该类不允许被继承 final 修饰方法:则该方法 ...
- Java中static、final和static final(final static)的区别(转)
大佬的总结(大赞!) final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变. final修饰的属性跟具体对象有关, ...
- final static 深度解析
function test(){ var a = b = 10; } test( ); alert(b); 由上一篇博客说起,最后输出的是10.引起歧义的原因是全局变量和局部变量的关系.顺着这个话题, ...
- Java中 final static super this instanceof 关键字用法
一.final关键字 final可以修饰变量.方法及类: 1.当定义一个final变量时,jvm会将其分配到常量池中,其所修饰的对象只能赋值一次,对基本类型来说是其值不可变,引用类型(包括作为函数形参 ...
- Java final static abstract关键字介绍
一,抽象类:abstract 1,只要有一个或一个以上抽象方法的类,必须用abstract声明为抽象类; 2,抽象类中可以有具体的实现方法; 3,抽象类中可以没有抽象方法; 4,抽象类中的抽象方法必须 ...
随机推荐
- 全面!总结BQ系列阻抗跟踪电量计化学Chemical ID配置和Golden学习方法
BQ系列阻抗跟踪电量计SOC最高能达到1%,功能强大,应用起来也比较复杂.不仅要配置好参数,匹配好化学ID,并且进行好Golden学习和相关测试.本文就讲述ID匹配,Golden学习和测试的终极方法流 ...
- JetBrains IntelliJ IDEA汉化
JetBrains IntelliJ IDEA汉化 开启 IntelliJ IDEA,点击右下角Configure菜单,选择 Plugins.在弹出的 Plugins窗口里,切换至 Marketpla ...
- 一.Promise入门准备阶段
一.Promise入门准备阶段 1.区别实例对象呵函数对象 2.两种类型的回调函数(同步与异步) 2.1 同步回调 2.2 异步回调 3.JS的error处理 3.1 错误的类型 3.2 错误处理与错 ...
- redis客户端修改了key-value对之后有时会报MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist o...错误,不能持久化
解决方案,连接redis客户端 redis目录下:redis-cli -h 127.0.0.1 -p 6379-h后为redis服务器ip,-p后为端口号进入redis-client之后输入命令 co ...
- 九. Go并发编程--context.Context
一. 序言 前几篇中提到 等待多个 goroutine 协作的方式可以使用WaitGroup. 但是有一种场景我们无论是使用Mutex, sync/Once,都无法满足. 场景如下 现在有一个 Ser ...
- 如何设计一个高内聚低耦合的模块——MegEngine 中自定义 Op 系统的实践经验
作者:褚超群 | 旷视科技 MegEngine 架构师 背景介绍 在算法研究的过程中,算法同学们可能经常会尝试定义各种新的神经网络层(neural network layer),比如 Layer No ...
- python实现色彩空间转换
目录: (一)调用转换函数实现图像色彩空间转换------ cv2.cvtColor函数 (二)色彩空间转换,利用inrange函数过滤视频中的颜色,实现跟踪某一颜色 正文: (一)调用转换函数实现图 ...
- [luogu7417]Minimizing Edges P
令$e_{G}(a)$和$o_{G}(a)$分别表示在图$G$中从1到$a$的长度为奇数/偶数的最短路(若该类最短路不存在则为$\infty$),不难得到有以下结论--$f_{G}(a,b)=\beg ...
- 推荐一款颜值逆天且功能齐全的开源Shell工具!
前言 以前在windows上一直使用的SSH工具是XShell,后来转到mac平台,XShell没有mac版本.所以之前一直在找一款颜值高,功能齐全的可以作为日常使用的Shell工具. 我知道mac下 ...
- myeclipse激活教程
1.安装,解压,下一步一下一步,一直到finish..结束 2.汉化破解激活:下载破解压缩包:解压