1、匿名对象:new persion().tell();这样的,它只开辟栈内存,没有栈引用的关系
2、构造方法的名称必须与类名称一致,构造方法的声明处不能有任何返回值类型的声明,不能在构造方法中使用return返回一个值
3、String有两种比较方式:一种是使用“==”完成,比较的是地址值;另一种是使用"equals"方法完成,比较的是具体的内容
4、String类两种实例化方法的区别:
直接赋值:String str1 = "hello"; String str2 = "hello"; String str3 = "hello"; 那这两个地址是相同的,可以有效节省堆内存
通过关键字new赋值:String str = new String("hello");实际是开辟两个内存对象
5、字符串内容的改变,改变的是内存地址的引用关系
6、this关键字的作用:表示类中的属性this.name = name;调用本类的构造方法,构造方法可以互相调用,使用this(参数)的形式完成,注意在使用this关键字调用其他构造方法时,this()调用方法的语句只能放在构造方法的首行,在使用this调用类中其他构造方法时,至少有一个构造方法是不用this调用的,以防止递归调用的情况出现;表示当前对象
7、java常用的内存区域:栈内存-->可以保存对象的名称(更准确地说是保存了引用的堆内存空间的地址);堆内存-->保存每个对象的具体属性;全局数据区-->保存static类型的属性;全局代码区-->保存所有的方法定义
8、使用static方法,不能调用非static的属性或方法
9、java代码块:普通代码块-->使用{}包含的,里面的变量属于局部变量,不能在代码块之外使用;构造块-->将代码块直接定义在类中,构造块优先于构造方法执行,且执行多次,只要一有实例化对象产生,就执行构造块中的内容;静态代码块-->使用static关键字声明的代码块,静态代码块优先于主方法执行,普通类中定义的静态块优先于构造方法执行,不管有多少个实例化对象产生,静态代码块只执行一次。静态代码块的作用主要用于静态属性的初始化
11、final关键字声明类、属性、方法:使用final声明的类不能有子类;使用final声明的方法不能被子类覆写;使用final声明的变量即成为常量,常量不可以修改。
12、抽象类:包含一个抽象方法的类必须是抽象类;抽象类和抽象方法都要使用abstract关键字声明;抽象方法只需要声明而不需要实现;抽象类必须被子继承,子类(如果不是抽象类)必须覆写抽象类中的全部方法;抽象类可以继承抽象类
13、接口是一种特殊的类,里面全部是由全局常量(static final)和公共的抽象方法(abstract)组成,也可以简化定义不写,一个接口不能继承一个抽象类,但是却可以通过extends关键字同时继承多个接口,实现接口的多继承,interface 子接口 extends 父接口A, 父接口B,...{}
14、对象的多态性:对象向上转型:父类 父类对象 = 子类实例; 对象向下转型: 子类 子类对象 = (子类)父类实例;
15、instanceof关键字判断一个对象到底是哪个类的实例,格式:对象 instanceof 类 -》 返回boolean类型
以上的正则,如果想驱动起来,则必须依赖Pattern类和Matcher类,Pattern主要是表达一个规则的意思,即:正则表达式的规则需要在Pattern类中使用。Matcher类主要表示使用Pattern指定好的验证规则。
17、Map接口的常用子类:
HashMap:无序存放的,是新的操作类,key不允许重复
HashTable:无序存放的,是旧的操作类,key不允许重复
TreeMap:可以排序的Map集合,按集合中的key排序,key不允许重复
WeakHashMap:弱引用的Map集合,当集合中的某些内容不再使用时清楚掉无用的数据,使用gc进行回收
IdentityHashMap:key可以重复的Map集合
18、HashMap和HashTable的区别:
性能:HashMap采用异步处理方式,性能更高,HashTable采用同步处理方式,性能较低
线程安全:HashMap属于非线程安全的操作类,HashTable采用线程安全的操作类
空键:允许将Key设置为null,HashTable不允许将Key设置为null,否则将出现Null Pointer Exception异常
19、对象的引用强度说明:
强引用:当内存不足时,JVM能可出现OutOfMemeryError错误而使程序停止,也不会回收此对象来释放内存空间
软引用:当内存不足时,会回收这些对象的内存,用来实现内存敏感的高速缓存
弱引用:无论内存是否紧张,被垃圾回收器发现立即回收
虚引用:和没有任何引用一样
20、Java把内存分成两种,一种是叫做栈内存,一种叫做堆内存,在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。栈内存用于存放由new创建的对象和数组。在堆内存中产生一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊变量就变成数组或者对象的引用变量。实际上栈中的变量指向堆内存中的变量,这就是java中的指针
21、ArrayList和LinkedList区别:a。ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。b。对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。c。对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。(1)对于ArrayList和LinkedList而言,在列表末尾增加一个元素所花费的开销都是固定。对于ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。(2)在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销都是固定的。(3)LinkedList不支持高效的随机元素访问。(4)ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而在LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。