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代码块,都是会先执行的,子父的时候,父代码块,子代码块,再是其他
java基础复习:final,static,以及String类的更多相关文章
- JAVA基础复习与总结<五> String类_File类_Date类
String类 .Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicoe字符组成. .Java没有内置的字符串类型,而是在标准java类库中提供了一个预定义的类String, ...
- Java基础复习笔记系列 五 常用类
Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...
- Java基础——数组应用之字符串String类
字符串String的使用 Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的. Java中没有内置的字符串类型,而是在标准Java类库中提供了一 ...
- Java基础知识强化35:String类之String的其他功能
1. String类的其他功能: (1)替换功能: String replace(char old, char new) String replace(String old,String new) ( ...
- Java基础知识强化34:String类之String类的转换功能
1. String类的转换功能 String[] split(String regex)//将字符串变成字符串数组(字符串切割) byte[] getBytes()//将字符串变成字节数组 char[ ...
- Java基础知识强化33:String类之String类的获取功能
1. String类的获取功能 int length() // 获取字符串中字符的个数(长度) char charAt(int index)//根据位置获取字符 int indexOf(int ch) ...
- Java基础知识强化32:String类之String类的判断功能
1. String类的判断功能: boolean equals (Object obj ) boolean equalsIgnoreCase (String str ) boolean contain ...
- Java基础知识强化30:String类之String的特点(String为什么是final)
1. String字符串特点: 一旦被赋值,字符串值就不能改变. 这里String是final修饰的,具有不可继承性. 2. 为什么String是final? 主要是为了"效率" ...
- JAVA基础复习与总结<七> File类_基本的IO概念_输入输出
File类 1.操作目录 mkdir() 创建目录,必须确保父目录存在,如果不存在,创建失败 mkdirs() list() 文件:目录字符串形式 ,只返回目录和文件的名称 listFiles() ...
- 【转载】JAVA基础复习与总结<三> Object类的常用方法
Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类.这里主要总结Object类中的三个常用方法:toString().equ ...
随机推荐
- CI框架入门2
文件目录与布局 1.user_guide 用户手册,可删 2.readme.rst 说明,可删 3.license.txt 证书,可删 4..gitignore composer. ...
- 巧妙利用before和after伪类实现文字的展开和收起
需求:一段文字,当收起的时候,显示4行,并且多余4行的部分用省略号表示,关键是在省略号前面留有空白部分来放一些图标等东西:展开的时候,全部显示. 例如下面的示例图: 收起的时候: 展开的时候: 在不用 ...
- MyBatis学习总结(一)——MyBatis快速入门(转载)
本文转载自http://www.cnblogs.com/jpf-java/p/6013537.html MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了 ...
- js 获取滚动条的高度 以及 设置滚动条的高度
//设置窗口滚动条高度 function setScrollTop(top){ if(!isNaN(top))document.body.scrollTop = top; } //取窗口滚动条高度 f ...
- SQLite 加密 -- SQLCipher
SQLite3 插件 github 下载地址 插件配置步骤地址 购买地址 其他加密方式介绍 SQLCipher API 地址 前言 应用使用 SQLite 来存储数据,很多时候需要对一部分的数据进行加 ...
- Spring整理
Bean配置 1. <context:component-scan base-package="com.test" />这个包下的Spring注解才有效 属性文件自动解 ...
- Redis学习笔记(3)-Hash
package cn.com; import java.util.HashMap; import java.util.List; import java.util.Map; import java.u ...
- 关于ios 3D变换 CGAffineTransformIdentity
每次做完3D变换以后,重新设置view的frame时,记得用CGAffineTransformIdentity 对3D变换进行还原,否则将会影响frame.当你对view进行3D变换后,重新设置vie ...
- MySQL 插入数据 通过命令提示窗口插入数据
MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下为向MySQL数据表插 ...
- 【待整理】MongoDB 数据集
MongoDB复制集原理 https://yq.aliyun.com/articles/64?spm=5176.100239.blogcont14692.15.XzCCrj MongoDB管理:如何优 ...