1. 内部类是寄存在外部类上的,普通内部类(非静态类)可以通过OuterClass.this.xxx来访问外部类的Field,即非静态内部类可以访问外部类的private成员,而外部类需要访问非静态类内部类的成员必须显示创建非静态内部类来调用。而关于静态内部类,它可以包含非静态成员,静态类说明它是直接寄存在外部类,而不是外部类对象,即静态内部类是无法访问外部类的实例成员的(与对象相连的,也就是说要新建对象时候才会初始化,或者赋值的)。新建一个非静态内部类:OutClass.In in = new OutClass().new In();当新建一个内部非静态类的时候,可以直接用外部类,而不用外部类对象了。
2. 闭包是一种能被调用的对象,它保存了创建它的作用域信息,可以把非静态内部类当做面向对象领域的闭包。
3. 枚举类的构造器只能用private修饰。所有枚举类都提供一个values()方法,方便遍历枚举类。在创建枚举类时候,枚举Field必须第一个写,中间用逗号隔开。以下给出Enum类2个例子:exam1:
public enum Gender {
MALE("男"), FEMALE("女");
private final String name;
private Gender(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
exam2:
public enum Gender {
MALE("男"){
public void info(){
System.out.println("男性");
}
},
FEMALE("女"){
public void info(){
System.out.println("女性");
}
};
private final String name;
private Gender(String name){
this.name = name;
}
}
4. 一个对象在堆内存中有3中状态:
a. 可达状态。有引用变量引用它。
b. 可恢复状态。没有任何引用变量引用它。系统垃圾回收机制准备回收对象时候会调用所有可恢复状态对象的finalize()方法,若在方法中有引用变量重新指向给对象,则对象再次成为可达状态,否则进入不可达状态。
c. 不可达状态。经过上述过程后留下的对象,是系统真正回收的对象所占用的资源。
5. 强制垃圾回收。有两种方式认为调用:System.gc()、Runtime.getRutime().gc()。并且该方法不是表示系统立刻去执行垃圾回收,而只是一个建议,真正什么时候执行,看系统的。
6. fin alize()方法的特点:
a. 永远不要主动调用某个对象的finalize()方法,该方法应该交给垃圾回收机制调用。
b. finalize()方法何时被调用,是否被调用具有不确定性,不要把finalize()方法当做 一定被执行的方法。
c. 当JVM执行可恢复对象的finalize()方法,可能使得该对象或系统中其他对象重新 变成可达状态。
d. 当JVM执行finalize()方法时出现异常时,垃圾回收机制不会报告异常,程序继续 执行。
7. 当用native关键词去修饰一个方法通常采用c语言来实现,同时它也破坏了Java跨平台这一特性。
8. 一个输出文件内容的比较另类的办法。算法如下:
package test;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Gender {
public static void main(String[] args) throwFileNotFoundException {
Scanner sc = new Scanner(new File("D://1.txt"));
while(sc.hasNextLine()){
System.out.println(sc.nextLine());
}
}
}
9. System类提供了一个方法,identityHashCode(Object object)该方法通过对象地址计算得出hashcode,而每一个类自己也都有一个hashCode()方法,加入hashCode()方法没有改写过,则这两个方法返回的hashCode是一个值,加入hashCode值相同那么一定指的是同一个对象。(比如说String类的hashCode方法就是被重写了,所以System的方法更加保证正确)。
10. Object类提供的clone机制只是“简单复制”,加入实例变量时引用类型,Object的clone机制也只是简单复制这个引用变量,这样原来对象的引用类型的实例变量与克隆对象对的引用类型的实例变量依然指向内存中同一个实例,这种“浅克隆”,只克隆该对象的所有Field值,不会对引用类型的Field值所引用的对象进行克隆。所以如果开发者要对对象进行“深克隆”,最好自己写“递归”克隆,保证所有的克隆,包括引用的对象。
11. String,StringBuffer,StringBuilder。
String:是一个不可变类,一旦创建,其中的内容就不可改变。
StringBuffer:创建后可以变化,StringBuilder与它相似,只不过StringBuffer是线程安全的,所以StringBuilder性能略高。StringBuilder有两个方法比较常见.length(),它表示字符序列的长度;.capacity()表示StringBuilder的容量,通常比length大。
12. Random类。如果两个Random对象的种子(初始化的时候给它的参数)相同,而且方法的调用顺序也相同,则它们会产生相同的数字序列。推荐采用当前时间作为Random类的种子,即 Random rand = new Random(System.currentTimeMillis());
13. BigDecimal类。这个类是为了更加精确计算而设计的。在初始化的时候,建议优先使用基于String的构造器,即BigDecimal(String val);或者通过BigDecimal.valeOf(double value);假如直接用BigDecimal big = new BigDecimal(0.05);由于0.05本来也是一个double类型,这样就又引入了精度丢失的问题。
14. Calendar类。这个类更加方便处理日期和时间,而且它是一个抽象类,通过Calendar.getInstance()来获取Calendar对象。先看下面代码:
Calendar call = Calendar.getInstance();
call.set(2003,7,23,0,0,0);//2003-8-23
也就是说设置的时候月份从0开始计算的,数字“7”代表“8”月。
call.add(MONTH,6);//2004-2-23
也就是说可以做加法的,但是呢:
call.set(2003,7,31,0,0,0);
call.add(MONTH,6);//2004-2-29
按照简单加法的话,应该是2004-2-31,但是2月没有31号,所以其实结果是29号。
Calendar容错性是可以调节的,call.setLenient(false);关闭容错性。比如说
call.set(MONTH,13);
这一语句,加入没有关闭之前会智能的将Year+1,假如关闭后会导致运行时异常。
关闭后只要超过字段的允许范围就会抛出异常,有好有坏要视具体情况定。
分享到:
相关推荐
这份"java复习笔记"旨在帮助学习者系统地回顾和深入理解Java的关键概念和技术,以便于提升编程技能和应对各种开发挑战。 一、基础语法 Java的基础语法包括变量、数据类型、运算符、流程控制语句等。例如,变量是...
Java EE的复习笔记是学习这个复杂框架的重要参考资料,尤其对于开发者来说,深入理解其核心概念和技术是必不可少的。 首先,Struts是Java EE中的一个MVC(Model-View-Controller)框架,它的主要任务是分离业务逻辑...
下面是 Java 基础知识的汇总和学习笔记。 Java 概述 Java 是由 Sun Microsystems 公司开发的高级编程语言,于 1995 年首次发布。Java 的主要特点包括平台独立、面向对象、简单易学等。Java 可以应用于桌面应用程序...
Java基础每日复习笔记-JavaSE高级阶段.edf
本压缩包集合了多种JAVA试题与复习笔记,涵盖了基础理论、编程实践以及解题技巧等多个方面,旨在帮助Java学习者巩固知识,提升编程能力。 1. **Java基础** - **数据类型**:包括基本数据类型(如int、char、...
JAVA复习笔记.doc
Java复习笔记.md
Java基础每日复习笔记-JavaSE高级阶段.2020-10-13-211312.edf
同时附赠一份我学习的资料,是github上的一位大神写的,非常棒的笔记,力荐!总结了Java知识、IO、http、socket、redis、git、docker,设计层次比较全,大家可以下载看看,注意文档格式是markdown的。
计算机二级java程序设计考试,每一个知识点的笔记及原题笔记。只要掌握这个笔记,99%都能考过。祝访客们考试成功!!!
Java复习笔记(期末考试复习) Java 是一种广泛应用于桌面程序、企业级开发、嵌入式开发的编程语言。下面是 Java 的一些重要知识点: 1.Java SE、Java EE、Java ME 的区别: Java SE(Java Standard Edition)主要...
Java期末复习笔记.md
【JAVA Web复习笔记】 在JAVA Web开发中,我们首先要理解几个关键的概念。Web技术主要分为两种架构模式:C/S(客户端/服务器端)和B/S(浏览器/服务器)。C/S架构通常涉及到专用的客户端应用程序与服务器进行交互,...
本资源适合已有java基础,但稍微有点忘记的人群,对于初学者可能不够全面,慎...本资源中的笔记未.md格式,是自己在观看黑马的教学视频时跟着做的笔记,弥补了部分后面Java核心技术部分,各位可下载下来进行复习使用。
本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...
Java基础每日复习笔记-JavaSE基础阶段.edf
【标签】"笔记笔记笔记笔记" 强调了这是一份学习资料,重点在于记录和回顾,对于读者来说,这可能是一个很好的参考资料,用于复习Java编程的各种知识点。 【压缩包子文件的文件名称列表】: 1. **Execution.htm** -...
这份名为"超详细的Java复习知识点2019——个人笔记"的文档,旨在为初学者提供一个全面且深入理解Java基础知识的指南。笔记内容可能涵盖了以下几个关键领域: 1. **Java语法基础**:包括变量、数据类型、运算符、...