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代码块,都是会先执行的,子父的时候,父代码块,子代码块,再是其他

java基础复习:final,static,以及String类的更多相关文章

  1. JAVA基础复习与总结<五> String类_File类_Date类

    String类 .Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicoe字符组成. .Java没有内置的字符串类型,而是在标准java类库中提供了一个预定义的类String, ...

  2. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  3. Java基础——数组应用之字符串String类

    字符串String的使用 Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的. Java中没有内置的字符串类型,而是在标准Java类库中提供了一 ...

  4. Java基础知识强化35:String类之String的其他功能

    1. String类的其他功能: (1)替换功能: String replace(char old, char new) String replace(String old,String new) ( ...

  5. Java基础知识强化34:String类之String类的转换功能

    1. String类的转换功能 String[] split(String regex)//将字符串变成字符串数组(字符串切割) byte[] getBytes()//将字符串变成字节数组 char[ ...

  6. Java基础知识强化33:String类之String类的获取功能

    1. String类的获取功能 int length() // 获取字符串中字符的个数(长度) char charAt(int index)//根据位置获取字符 int indexOf(int ch) ...

  7. Java基础知识强化32:String类之String类的判断功能

    1. String类的判断功能: boolean equals (Object obj ) boolean equalsIgnoreCase (String str ) boolean contain ...

  8. Java基础知识强化30:String类之String的特点(String为什么是final)

    1. String字符串特点: 一旦被赋值,字符串值就不能改变. 这里String是final修饰的,具有不可继承性. 2. 为什么String是final? 主要是为了"效率"  ...

  9. JAVA基础复习与总结<七> File类_基本的IO概念_输入输出

    File类 1.操作目录  mkdir() 创建目录,必须确保父目录存在,如果不存在,创建失败 mkdirs() list() 文件:目录字符串形式 ,只返回目录和文件的名称 listFiles()  ...

  10. 【转载】JAVA基础复习与总结<三> Object类的常用方法

    Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类.这里主要总结Object类中的三个常用方法:toString().equ ...

随机推荐

  1. Qt写Activex插件 总结

    最近写的插件功能基本完成,也遇到了一些坑,在这里记录一下. 我写的这个插件的js接口是仿造google earth的js接口,尽可能的达到与它的api一致.先从最简单的说起: 1. 导出接口中的flo ...

  2. websocket 实现聊天功能

    <html> <head> <base href="<%=basePath%>"> <title>webscoket t ...

  3. [IOS] 利用@IBInspectable

    某些uiview中设置 这个关键字 IBInspectable 可以让其设置的属性,在右侧的属性栏目里面进行直接设置, 这是最近看了一下wwdc的一个视频学习到的,可以方便的进行 UI的测试,

  4. 分部方法 partial

    当有如下这样类似的情况出现的时候,可以有更好的优化方式来处理,那就是分部方法 class PartOld { string name; public virtual void OnChangeName ...

  5. jcl-over-slf4j log桥接工具简介

    ava 界里有许多实现日志功能的工具,最早得到广泛使用的是 log4j,许多应用程序的日志部分都交给了 log4j,不过作为组件开发者,他们希望自己的组件不要紧紧依赖某一个工具,毕竟在同一个时候还有很 ...

  6. C 符号

    语言的运算符可分为以下几类: 1 算术运算符 用于各类数值运算.包括加(+).减(-).乘(*).除(/).求余(或称模运算,%).自增(++).自减(–)共七种. 2.关系运算符 用于比较运算.包括 ...

  7. java常用集合框架底层实现简介与注意点

    Collection: ArrayList:1:底层实现是数组,默认长度是10.2:add(),判断是否数组越界,是数组扩容为原来的两倍.3:remove(),copy数组,size-1,释放空虚的空 ...

  8. jQuery $ 第二个参数的用法

    jQuery(selector, [context]),相当于 $(context).find(selector) 或者 context.find(selector) $('div').each(fu ...

  9. Linux服务器上监控网络带宽的18个常用命令

    [51CTO精选译文]本文介绍了一些可以用来监控网络使用情况的Linux命令行工具.这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度.入站流量和出站流量分开来显示. 一些命令可以 ...

  10. javascript中的对象,原型,原型链和面向对象

    一.javascript中的属性.方法 1.首先,关于javascript中的函数/“方法”,说明两点: 1)如果访问的对象属性是一个函数,有些开发者容易认为该函数属于这个对象,因此把“属性访问”叫做 ...