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. 一维前缀和 连续数组和为k

    给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数. 滑动窗口没办法解决有负数的情况 方法一: 预处理 前缀和 sum_ij = preSum[j] - preSum[i-1 ...

  2. git rebase 合并提交

    git rebase 合并提交 合并最近多次提交记录 语法 git rebase -i HEAD~n 1.进入合并模式 合并最近三次提交 git rebase -i HEAD~3 然后你会看到一个像下 ...

  3. leakcanary内存泄漏:此篇有加了内存泄漏的apk demo

    概括:   ·用Android studio写一个demo     ·配置leakcanary     ·加入内存泄漏代码片段     ·安装apk 验证结果     ·源码地址 一.android ...

  4. 湖湘杯2020 writeup

    这个平台中间卡的离谱,卡完过后交了flag分还掉了 Web 题目名字不重要 也算是非预期吧,赛后y1ng师傅也说了因为要多端口环境必须这样配,预期解很难 NewWebsite 后台弱口令admin a ...

  5. 第三课 Dubbo设计中的设计模式

    责任链模式  责任链模式在Dubbo中发挥的作用举足轻重,就像是Dubbo框架的骨架.Dubbo的调用链组织是用责任链模式串连起来的. 责任链中的每个节点实现Filter接口,然后由ProtocolF ...

  6. Python - 一行代码查看当前操作系统默认的编码标准

    一句代码 在 cmd 中执行 > python3 -c 'import locale; print(locale.getpreferredencoding())' UTF-8

  7. c#.net 实现短网址的简单方法

    短网址,现在很流行了,本文为大家介绍用c#.net实现短网址的方法,有兴趣的朋友,不妨参考下. 短网址,也被叫做网址缩短.网址压缩选装. 这里我们用一个例子来说明其原理吧,假如您带了一包东西去超市购物 ...

  8. MySQL基础语句(MySQL内置函数 )

    MySQL 字符串函数 函数 描述 实例 ASCII(s) 返回字符串 s 的第一个字符的 ASCII 码. 返回 CustomerName 字段第一个字母的 ASCII 码: SELECT ASCI ...

  9. 关于Java内存泄漏的介绍

    翻译自这篇文章 Java一个最显著的优势就是它的内存管理.你只需要简单地创建对象,而Java垃圾收集器会负责内存的分配与释放.不过,事情并没有那么简单,因为在Java应用中时常会出现内存泄漏. 1. ...

  10. 第03章_基本的SELECT语句

    第03章_基本的SELECT语句 1. SQL概述 1.1 SQL背景知识 1946 年,世界上第一台电脑诞生,如今,借由这台电脑发展起来的互联网已经自成江湖.在这几十年里,无数的技术.产业在这片江湖 ...