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,抽象类中的抽象方法必须 ...
随机推荐
- "迷途"的野指针,都快找不着北了
指针,C语言开发者表示很淦,指针的使用,很多人表示不敢直面ta,不像Java一样,有垃圾自动回收功能,我们不用担心那么多内存泄漏等问题,那C语言里边呢,指针又分为了"野指针",&q ...
- MySQL:互联网公司常用分库分表方案汇总!
一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数据库连接少甚至无连接可用.接下来就 ...
- gorm框架表名自动加s问题
查看日志会发现表名自动加了s 在model实现以下方法即可解决 type UsUser struct { ID int64 `gorm:"column:id" db:"c ...
- 快速搭建 kvm web 管理工具 WebVirtMgr
作者:SRE运维博客 博客地址: https://www.cnsre.cn/ 文章地址:https://www.cnsre.cn/posts/211117937177/ 相关话题:https://ww ...
- 多云搭建 K3S 集群
作者:SRE运维博客 博客地址: https://www.cnsre.cn/ 文章地址:https://www.cnsre.cn/posts/211119132529/ 相关话题:https://ww ...
- BootStrap中模态框踩坑
在模态框中使用html标签上的自定义属性来打开模态框后,在使用JS关闭模态框,就会出现多层蒙板问题 出现这个问题的原因就是没有仔细看bootstrap的官方文档,我人麻了,搞了好久 务必将模态框的 H ...
- [cf1515I]Phoenix and Diamonds
将$n$类物品按照价值为第一关键字(从大到小).质量为第二关键字(从小到大)排序,此时贪心策略即依次贪心选(排序后)第$i$类的物品(其中$i$从1到$n$) 为了方便,排序后第$i$类物品质量.价值 ...
- vue 3 学习笔记 (六)——watch 、watchEffect 新用法
选项式API与之前写法相同,本篇文章主要通过 Options API 和 Composition API 对比 watch 的使用方法,让您快速掌握 vue3 中 watch 新用法.建议收藏! 一. ...
- 还有这种好事!netty自带http2的编码解码器framecodec
目录 简介 Http2FrameCodec Http2Frame.Http2FrameStream和Http2StreamFrame Http2FrameCodec的构造 Stream的生命周期 流控 ...
- 从一个小Bug,到Azure DevOps
1. 一个小Bug 最近和同事提起一个几年前的 Bug,那是一个很小很小的 Bug,没什么技术含量.那时候我刚入职,正好公司卖了一款仪器到某个国家,但是那边说配套的软件运行不起来,一打开就报错.经过排 ...