Java基础知识01
1. String,StringBuffer和StringBuilder的区别?
String:final修饰,String对象创建后不可修改;StringBuffer和StringBuilder对象是变量,可以进行修改。
如果String对象不断的创建赋值拼接,与后两者的append方法拼接相比,从运行速度上来说:String < StringBuffer < StringBuilder。
如果是直接复制,则String就免掉了中间过程的创建和销毁,则String的运行速度则大于后两者。
StringBuffer和StringBuilder的区别就是是否是线程安全的,StringBuffer是线程安全,而StringBuilder非线程安全。
适用场景:
- String:少量的字符串操作;
- StringBuffer:多线程下字符串缓冲区进行大量的字符串操作;
- StringBuilder:单线程下字符缓存区进行大量的字符串操作;
2.public, default, protected,private修饰的访问控制权区别?
3.封装,继承,多态的特征
- 封装性: 保护内部的定义结构的安全性。 private属性封装
- 继承性: 在已有的程序结构上继续扩充新的功能。
- 多态性: 指的是在某一概念范围内的满足。(继承,重新,父类指向子类,向上转型,父类无法调用子类特有数据)
4.抽象类和接口的区别
No |
区别 |
抽象类 | 接口 |
1 | 关键字 | abstract | interface |
2 | 组成 | 构造方法,普通方法,抽象方法,static 方法, 常量,变量 | 抽象方法,全局常量,默认方法,static方法 |
3 | 子类使用 | class子类extends抽象方法 | class子类implements接口 |
4 | 关系 | 抽象类可以实现接口 | 接口不可以继承抽象类,但是可以实现多个接口 |
5 | 权限 | 各种权限 | 只能用public权限 |
6 | 限制 | 单继承局限 | 没有局限 |
7 | 子类 | 抽象类和接口都必须有子类,子类必须覆写他们的抽象方法 | |
8 | 实例化对象 | 依靠子类的向上转型实现对象的额实例化 |
5.JVM原理,编译流程,类装载的过程
- 第一步:编译后的字节码文件格式主要分为两部分:常量池和方法字节码。常量池记录的是代码出现过的(常量、类名、成员变量等)以及符号引用(类引用、方法引用,成员变量引用等);方法字节码中放的是各个方法的字节码。
- 第二步(运行):java类运行的过程大概分为两个步骤:(1)类的加载 (2)类的执行。需要说明的一点的是:JVM主要在程序第一次运行时主动使用类的时候,才会立即去加载。换言之,JVM并不是在运行时就会把所有使用到的类都加载到内存中,而是用到,不得不加载的时候,才加载进来,而且只加载一次。
类的装载流程:
6.GC垃圾回收机制
相关概念:
- 引用计数:一个对象被引用计数器加一,取消引用计数器减一,引用计数器为0才能被回收。优点:简单。缺点:不能解决循环引用的问题,比如A引用B,B引用A,但是这两个对象没有被其他任何对象引用,属于垃圾对象,却不能回收;每次引用都会附件一个加减法,影响性能。
- 搜素算法GC Root Tracing:通过一系列的名为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连,即从GC Roots到这个对象不可达,则证明此对象是不可用的。
- 标记清除法:分为两个阶段:标记阶段和清除阶段。标记阶段通过根节点标记所有可达对象,清除阶段清除所有不可达对象。缺点:因为清除不可达对象之后剩余的内存不连续,会产生大量内存碎片,不利于大对象的分配。
- 复制算法:将内存空间分成相同的两块,每次只是用其中的一块,垃圾回收时,将正在使用的内存中的存活对象复制到另外一块空间,然后清除正在使用的内存空间中的所有对象,这种回收算法适用于新生代垃圾回收。优点:垃圾回收对象比较多时需要复制的对象恨少,性能较好;不会存在内存碎片。缺点:将系统内存折半。
- 标记压缩算法:是一种老年代回收算法,在标记清除的基础上做了一些优化,首先从根节点开始标记所有不可达的对象,然后将所有可达的对象移动到内存的一端,最后清除所有不可达的对象。优点:不用将内存分为两块;不会产生内存碎片。
- 分代算法:新生代使用复制算法,老生带使用标记清除算法或者标记压缩算法。几乎所有的垃圾回收期都区分新生代和老生带。
- 分区算法:将整个堆空间分成很多个连续的不同的小空间,每个小空间独立使用,独立回收。为了更好的控制gc停顿时间,可以根据目标停顿时间合理地回收若干个小区间,而不是整个堆空间,从而减少gc停顿时间。
7.虚拟机栈,寄存器CPU,方法域,本地方法栈(java中的jni调用)(线程独有); 方法区(method),堆内存(heap),常量池(共享区)
8.异常处理机制try catch,finally的使用
- 当程序在运行过程中出现异常后,JVM自动根据异常的类型实例化一个与之匹配的异常类对象,(此处用户不用去关心new,由系统自动负责处理)
- 产生的异常对象之后会判断当前的语句上是否存在异常处理,如果没有进行异常处理,那么就由JVM进行默认的处理。处理的方式 :输出异常信息,然后程序自动结束。
- 产生异常对象后会判断当前语句是否存在异常处理,有try异常捕获操作,那么会由try语句来捕获产生的异常类实例化对象。而后与try语句后的catch进行比较,如果匹配,则用当前的catch 进行异常处理 ,如果不匹配,则向下继续进行匹配。
- 不管异常处理是否能够匹配,那么都要向后执行,如果此程序中存在有finally语句,那么先执行 finally中的代码,但是执行完毕后,需要根据之前的catch匹配来决定如何执行。如果之前成功的捕获异常,那么就继续执行finally之后的代码,如果没有捕获异常成功,那么就将次异常交给JVM处理,结束程序。
9.匿名内部类的优点,适用于抽象和接口
interface Message{
public void print();
}
public class TestDemo {
public static void main(String[] args){
fun(new Message(){ //匿名内部类
@Override
public void print() {//在里面覆写接口的抽象方法
System.out.println("hello word!");
}
});
}
public static void fun(Message msg){
msg.print();
}
}
匿名内部类是在抽象类和接口的基础上发展的,匿名内部类的最大好处在于帮助减少类的定义。
10.包装类,类的装箱和拆箱,向下转型
基本类型的包装类:
- 对象型包装类(Object直接子类): Character, Boolean
- 数值型包装类(Number直接子类):Byte, Short, Integer, Double, Float, Long
- 装箱操作:将基本数据类型变为包装类型的形式
- 每个包装类的构造方法都可以接收各自数据类型的基本形式。
- 拆箱操作:从包装类之中取出被包装的数据:
- 利用Number类中提供的一系列的:xxxValue()方法。
Object 流程eg:基本数据类型->自动装箱(成为对象)->向上转型为Object。
public class TestDemo {
public static void main(String[] args){
Object obj = 10; //向上转型,自动装箱
int temp = (Integer) obj; //向下转型,自动拆箱
System.out.println(temp);
}
}
Java基础知识01的更多相关文章
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- java基础知识小总结【转】
java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...
- Java基础知识系列——String
最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...
- 学习android学习必备的java基础知识--四大内部类
学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...
- java基础知识梳理
java基础知识梳理 1 基本数据类型
- java基础知识回顾之---java String final类普通方法
辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...
- Java 基础知识(一)
Java基础知识篇: 一.关键字解释 1. final:修饰非抽象类,非抽象方法和属性, 以及修饰方法参数,代表“无法改变的”.出于对设计或者效率的考虑使用该关键字. final类无法被继承,fina ...
- java 基础知识三 java变量
java 基础知识 三 变量 1.作用域 {} 包围起来的代码 称之为代码块,在块中声明的变量只能在块中使用 2.常量 就是固定不变的量,一旦被定义,它的值就不能再被改变. 3.变量 变量必须在程序 ...
随机推荐
- 20155236 2016-2017-2 《Java程序设计》第七周学习总结
20155236 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 Calendar是个抽象类,java.util.GregorianCalendar是其子类, ...
- <a href=“#”>
在html中看到这样的属性:<a href=“#”>搜了好久,感觉不甚明白,现记之,等遇到了再做补充. # is called an anchor (or hash...). so the ...
- 信息管理代码分析<二>读取二进制文件数据
first和end做为全局变量,分别指向链表的头和尾.建立链表的方式也比较简易,从二进制文件数据块中,依次从头到尾读取,每读取一个就建立一个结点. /*基本模型*/ EMP *emp1; while( ...
- WriteableBitmap(二) 实例
使用前面定义的WriteableBitmap,我们可以很容易地创建一个足够容纳整个100 x 100图像的数组: byte[] pixels = new byte[wbmap.PixelHeight* ...
- Window 下好用的同步备份工具(来自微软)SyncToy
SyncToy 简单好用,满足备份的基本需求.
- 搜狗Q3业绩迅猛增长,战略整合稳步推进
继9月16日腾讯与搜狗战略结盟之后,最近搜狗再次吸引了业界关注的目光,10月29日,搜狗公布了截至2013年9月30日的第三季度未经审计的财务报告.财报显示,新搜狗Q3营收达5700万美元,同 ...
- EBS Webservice Timeout,HTTP Server Return "500 Internal Server Error"
http://blog.itpub.net/26687597/viewspace-1207571/ 基于Oracle EBS R12,开发了一个Webservice用于返回某项主数据,当请求的数据量非 ...
- 在TFS中使用Git Tags(标签或标记),实现代码的版本管理
一.概述: 与TFVC中标记(Label)一样,Git的标签(Tag)也是TFS系统的代码管理中非常重要的一个版本管理工具.使用标签,我们可以每个时间点的代码注上一个通俗.并且容易记忆的名称(例如标签 ...
- HttpClient4.X发送Get请求的url参数拼接
HttpClient4.X发送Get请求的参数拼接 使用httpClient发送get请求时,请求参数可以以?key=val&key1=val1的拼接到url后面. 但是请求参数较多时,这种方 ...
- js获取select下拉框的value值和text文本值
介绍一种取下拉框值以及绑定下拉框数据的方法 这里用到的jquery-ui-multiselect插件 1.前台html代码 <span class="ModuleFormFiel ...