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的更多相关文章

  1. java修饰符public final static abstract transient

    JAVA 修饰符public final static abstract transient  关键字: public final static abstract ...  1.public prot ...

  2. JAVA 构造器, extends[继承], implements[实现], Interface[接口], reflect[反射], clone[克隆], final, static, abstrac

    记录一下: 构造器[构造函数]: 在java中如果用户编写类的时候没有提供构造函数,那么编译器会自动提供一个默认构造函数.它会把所有的实例字段设置为默认值:所有的数字变量初始化为0;所有的布尔变量设置 ...

  3. 关于final static修饰的常量部署后没有更新的问题

    出现问题的场景是这样的: 项目中有个专门放流程Key值常量的类FlowConstants.java,其中这些常量都用了final static 修饰.某天因为修改了流程,相应的key值也改变了,所以直 ...

  4. Java中的内存处理机制和final、static、final static总结

    Java中的内存处理机制和final.static.final static总结   装载自:http://blog.csdn.net/wqthaha/article/details/20923579 ...

  5. Java final static关键字

    Java中的final关键字 使用 final 关键字做标识有 “最终的” 含义. final 可以修饰 类.方法.属性.变量 final 修饰类: 则该类不允许被继承 final 修饰方法:则该方法 ...

  6. Java中static、final和static final(final static)的区别(转)

    大佬的总结(大赞!) final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变. final修饰的属性跟具体对象有关, ...

  7. final static 深度解析

    function test(){ var a = b = 10; } test( ); alert(b); 由上一篇博客说起,最后输出的是10.引起歧义的原因是全局变量和局部变量的关系.顺着这个话题, ...

  8. Java中 final static super this instanceof 关键字用法

    一.final关键字 final可以修饰变量.方法及类: 1.当定义一个final变量时,jvm会将其分配到常量池中,其所修饰的对象只能赋值一次,对基本类型来说是其值不可变,引用类型(包括作为函数形参 ...

  9. Java final static abstract关键字介绍

    一,抽象类:abstract 1,只要有一个或一个以上抽象方法的类,必须用abstract声明为抽象类; 2,抽象类中可以有具体的实现方法; 3,抽象类中可以没有抽象方法; 4,抽象类中的抽象方法必须 ...

随机推荐

  1. 第三天 while循环 及其用法

    (1)语法格式:while  条件: ..... 语法二:while  条件: break  # 跳出当前循环 语法三:while 条件: else  # 当while循环正常结束时执行该语句:只有程 ...

  2. (五)MySQL函数

    5.1  常用函数 5.2  聚合函数(常用) 函数名称 描述 COUNT() 计数 SUM() 求和 AVG() 平均值 MAX() 最大值 MIN() 最小值 ....   ....   想查询一 ...

  3. C# 计算农历日期方法(2021版)

    解决问题 旧版农历获取方法报错,会有 到 2021年 m数组越界了 if (LunarData[m] < 4095) 此方法可以解决 主体代码 public static class China ...

  4. Python基础(slice切片)

    l = ['傻狗1','傻狗2','傻狗3','傻狗4','傻狗5','傻狗6'] print(l[0:3])#['傻狗1', '傻狗2', '傻狗3'] numbers = list(range(1 ...

  5. OpenCV常用操作函数大全

    https://blog.csdn.net/Vici__/article/details/100714822 目录 cv2常用类: 1.图片加载.显示和保存 2.图像显示窗口创建与销毁 3.图片的常用 ...

  6. HTML四种定位-粘滞定位

    粘滞定位 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset=&q ...

  7. 基于Vue简易封装的快速构建Echarts组件 -- fx67llQuickEcharts

    fx67llQuickEcharts A tool to help you use Echarts quickly! npm 组件说明 这本来是一个测试如何发布Vue组件至npm库的测试项目 做完之后 ...

  8. 洛谷 P4484 - [BJWC2018]最长上升子序列(状压 dp+打表)

    洛谷题面传送门 首先看到 LIS 我们可以想到它的 \(\infty\) 种求法(bushi),但是对于此题而言,既然题目出这样一个数据范围,硬要暴搜过去也不太现实,因此我们需想到用某种奇奇怪怪的方式 ...

  9. Break up CF700C

    Break up CF700C 首先考虑只能删一条边的做法,我们可以找出所有的桥,然后随便跑一条 S 到 T 路径,如果这条路径上有桥就说明可以,否则不行 发现这个做法其实是 O(M) 的 那么可以先 ...

  10. pcm-pcie 解析

    简介 pcm 全称为 Performance Counter Monitor,该项目是针对 intel 平台处理器的资源利用率进行监控的工具.在现代 Intel 处理器已经提供了监视处理器内部性能事件 ...