• java基础复习:final,static,以及String类


    2.final

    1)为啥String是final修饰的呢?

    自己答:

    答案:

    主要是为了“效率” 和 “安全性” 的缘故。若 String允许被继承, 由于它的高度被使用率, 可能会降低程序的性能,所以String被定义成final。

    还有另一个解释: 

    带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String。为String类指定final防止了人们覆盖length()方法。 

    另外,如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%。

    String类。

    效率,安全,如果是能被继承影响性能

    final类的方法也是final的,防止了其

    方法被覆盖,如length(),java内联final方法提高性能.

    3.final

    可以修饰类,修饰方法,修饰变量名,(思考修饰map会如何、?)

    1)当用final修饰一个类时,表明这个类不能被继承。(具有安全)

    2)修饰方法:禁止该方法在子类中被覆盖。(以前还为了效率)

    注意:private方法会被隐式的被定义为final的。就是private方法不被覆盖

    3)修饰变量:如果是基本数值类型,那么赋值后就不能被修改了,

    如果是引用类型的,那么在它初始化之后不能再指向其他的对象,如不能final a = new A a ;不能再a = new A a;

    4)final变量与普通成员变量的区别:

    5)static与final的区别:

    static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变。(但是会保证多个)

    就是两个东西,static会打出来一样,而final不会,static是只要一个

    6)关于final修饰的map

    可以修改数据,因为这是修饰的引用啦。

    比如 final   Map  map =new  HashMap();    可以往map里put数据

    final   List  list =new  ArrayList();   可以往list里add数据

    所以要是final   Map  map =new  HashMap(); ,

    再写 map =new  HashMap(); 也是不行的。

    final类不被继承,安全;

    final方法不被覆盖,private方法里默认final;

    final变量可保持不变不被重新赋值,若为引用保证不指向其他对象。

    编译器把final的值看做是定量一样

    注意,如果不是直接赋值,而是get方法

    这种也会是false。

    static只保存一份副本,而final是保证变量不变

    修饰map,list,相当于修饰引用型的变量。

    4.static

    1)修饰类,只能是内部类,此时内部类作为普通类使用;main就是一个?内部类?

    2)static方法:是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。

    3)static变量:在内存中只保存一份副本,当且仅当类被加载时被初始化一次。而非静态变量创建对象时初始化,多个副本

    4)static代码块:只有在类被加载的时候初始化这一次,可以用来提高性能

    提问:

    1)static会改变成员的访问权限吗?

    不会,在java中,访问权限是被private,public,protected

    2)能通过this访问静态成员变量吗?

    能的。

    结果是33,因为这个static修饰的value是被所有对象共享的。(注意:java规定没有static修饰的局部变量。)所以this就是这个main类里面的value自然是static修饰的33的

    3)执行顺序问题:

    base static  父类的静态代码块
    test static    子类的静态代码块
    base constructor    父类的构造方法
    test constructor      子类的构造方法

    ------------------------------------------------------

    test static
    myclass static
    person static
    person Test    这个难一点。。这是Person类的方法
    test constructor   父类的
    person MyClass  
    myclass constructor    子类的

    题目源文档 <http://www.cnblogs.com/dolphin0520/p/3799052.html>

    >

    修饰内部类;

    修饰方法,没有this,在没有创建对象的情况下可以通过类本身直接调用static修饰的方法;

    修饰变量,只有一份,类加载时候初始化,被所有对象共享。

    static代码块,都是会先执行的,子父的时候,父代码块,子代码块,再是其他

  • 相关阅读:
    MySQL 中 truncate 和 delete 的坑
    理解 Linux 中的 inodes
    Linux 下date命令的常见用法
    Linux 下du命令详解
    nc
    启动Tomcat时报错:错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1101; nested exception is: java.net.BindException: Address already in use: JVM_Bind
    ssm调用webservice接口并进行文件传输
    mybatis 中 执行INSERT操作后获取自增主键
    mysql时间差8小时
    生成验证码工具类
  • 原文地址:https://www.cnblogs.com/MyOceansWeb/p/5874523.html
Copyright © 2020-2023  润新知