1、final修饰符(关键字)。
被final修饰的类,
就意味着不能再派生出新的子类,
不能作为父类而被子类继承。
因此一个类不能既被abstract声明,
又被final声明。将变量或方法声明为final,
可以保证他们在使用的过程中不被修改。
被声明为final的变量必须在声明时给出变量的初始值,
而在以后的引用中只能读取。
被final声明的方法也同样只能使用,
即不能方法重写。
提供finally块来执行任何清除操作。 不管有没有异常被抛出、捕获,finally块都会被执行。 try块中的内容是在无异常时执行到结束。 catch块中的内容, 是在try块内容发生catch所声明的异常时, 跳转到catch块中执行。 finally块则是无论异常是否发生, 都会执行finally块的内容, 所以在代码逻辑中有需要 无论发生什么都必须执行的代码, 就可以放在finally块中。 3、finalize是方法名。 java技术允许使用finalize()方法 在垃圾收集器将对象从内存中 清除出去之前做必要的清理工作。 这个方法是由垃圾收集器 在确定这个对象没有被引用时对这个对象调用的。 它是在object类中定义的, 因此所有的类都继承了它。 子类覆盖finalize()方法以整理系统资源或者被执行其他清理工作。 finalize()方法是在垃圾收集器 删除对象之前对这个对象调用的。 ###2.Overload和Override的区别。 首先重载和重写是应用于两个不同场景下面的两种不同的手段: 两者各自的特征: 重载(Overload):首先是位于一个类之中或者其子类中, 具有相同的方法名, 但是方法的参数不同, 返回值类型可以相同也可以不同。 (1):方法名必须相同 (2):方法的参数列表一定不一样。 (3):访问修饰符和返回值类型可以相同也可以不同。 其实简单而言:重载就是对于不同的情况写不同的方法。 比如,同一个类中, 写不同的构造函数用于初始化不同的参数。 重写(override):一般都是表示子类和父类之间的关系, 其主要的特征是: 方法名相同, 参数相同, 但是具体的实现不同。 重写的特征: (1):方法名必须相同,返回值类型必须相同 (2):参数列表必须相同 (3):访问权限不能比父类中被重写的方法的访问权限更低。 例如:如果父类的一个方法被声明为public, 那么在子类中重写该方法就不能声明为protected。 (4):子类和父类在同一个包中, 那么子类可以重写父类所有方法, 除了声明为private和final的方法。 (5):构造方法不能被重写, 简单而言:就是具体的实现类对于父类的该方法实现不满意, 需要自己在写一个满足于自己要求的方法。
首先说运行速度,或者说是执行速度,
在这方面运行速度快慢为:StringBuilder > StringBuffer > String
String最慢的原因:
String为字符串常量,
而StringBuilder和StringBuffer均为字符串变量,
即String对象一旦创建之后该对象是不可更改的,
但后两者的对象是变量,是可以更改的。
而StringBuilder和StringBuffer的对象是变量,
对变量进行操作就是直接对该对象进行更改,
而不进行创建和回收的操作,
所以速度要比String快很多。
String ----> 字符串常量
StringBuffer ----> 字符串变量(线程安全的)
StringBuilder ----> 字符串变量(非线程安全的)
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
GC是垃圾收集的意思,
内存处理是编程人员容易出现问题的地方,
忘记或者错误的内存回收
会导致程序或系统的不稳定甚至崩溃,
Java提供的GC功能
可以自动监测对象是否超过作用域
从而达到自动回收内存的目的,
Java语言没有提供释放已分配内存的显示操作方法。J
ava程序员不用担心内存管理,
因为垃圾收集器会自动进行管理。
要请求垃圾收集,
可以调用下面的方法之一:
System.gc()或Runtime.getRuntime().gc(),
但JVM可以屏蔽掉显示的垃圾回收调用。
垃圾回收可以有效的防止内存泄露,
有效的使用可以使用的内存。
垃圾回收器通常是作为一个单独的低优先级的线程运行,
不可预知的情况下对内存堆中
已经死亡的或者长时间没有使用的对象进行清除和回收,
程序员不能实时的调用垃圾回收器
对某个对象或所有对象进行垃圾回收。
Java有了GC,
就不需要程序员去人工释放内存空间。
当Java虚拟机发觉内存资源紧张的时候,
就会自动地去清理无用变量所占用的内存空间。
当然,如果需要,
程序员可以在Java程序中显式地使用System.gc()
来强制进行一次立即的内存清理。
Java在构造实例时的顺序是这样的: 1、分配对象空间,并将对象中成员初始化为0或者空 ,java不允许用户操纵一个不定值的对象。 2、执行属性值的显式初始化 3、执行构造器 4 、将变量关联到堆中的对象上 而执行构造器的步骤有可以分为以下几步: 1、Bind构造器的参数 2、如果显式的调用了this,那就递归调用this构造器然后跳到步骤5 3、递归调用显式或者隐式的父类构造器,除了Object以外,因为它没有父类 4、执行显式的实例变量初始化(也就是上边的流程中的第二步,调用返回以后执行, 这个步骤相当于在父构造器执行后隐含执行的,看样子像一个特殊处理)
构造器Constructor不能被继承, 因此不能重写Overriding, 但可以被重载Overloading 1). 构造器不能是native,final,static,synchronized 的, 可以是public,private,或什么都没有。 2). 构造器函数里可以写return呢,但后面什么都不许有(包括null) 3). 构造器不能返回值. 但如果有个"构造器"返值了, 它就不是构造器喽,只是个普通方法 4). super();this();这两个方法只能在构造方法里调用. 5). 成员变量声明时候赋值,比构造函数还早.
Singleton模式主要作用是保证在Java应用程序中, 一个类Class只有一个实例存在。 一般Singleton模式通常有几种种形式: 第一种形式: 定义一个类, 它的构造函数为private的, 它有一个static的private的该类变量, 在类初始化时实例话, 通过一个public的getInstance方法获取对它的引用, 继而调用其中的方法。 public class Singleton { private Singleton(){} //在自己内部定义自己一个实例,是不是很奇怪? //注意这是private 只供内部调用 private static Singleton instance = new Singleton(); //这里提供了一个供外部访问本class的静态方法,可以直接访问 public static Singleton getInstance() { return instance; } } 第二种形式: public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance() { //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次 //使用时生成实例,提高了效率! if (instance==null) instance=new Singleton(); return instance; } } 其他形式: 定义一个类, 它的构造函数为private的, 所有方法为static的。 一般认为第一种形式要更加安全些
Error类和Exception类都继承自Throwable类。 二者的不同之处: Exception: 1.可以是可被控制(checked) 或不可控制的(unchecked)。 2.表示一个由程序员导致的错误。 3.应该在应用程序级被处理。 Error: 1.总是不可控制的(unchecked)。 2.经常用来用于表示系统错误或低层资源的错误。 3.如何可能的话,应该在系统级被捕捉。 error 表示恢复不是不可能但很困难的情况下的一种严重问题。 比如说内存溢出。 不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。 也就是说, 它表示如果程序运行正常, 从不会发生的情况。
hashmap: 1.线程不安全 2.允许有null的键和值 3.效率高一点、 4.方法不是Synchronize的要提供外同步 5.有containsvalue和containsKey方法 6.HashMap 是Java1.2 引进的Map interface 的一个实现 7.HashMap是Hashtable的轻量级实现 hashtable: 1.线程安全 2.不允许有null的键和值 3.效率稍低、 4.方法是是Synchronize的 5.有contains方法方法 6.Hashtable 继承于Dictionary 类 7.Hashtable 比HashMap 要旧
对于==,
如果作用于基本数据类型的变量,
则直接比较其存储的
“值”是否相等;
如果作用于引用类型的变量,
则比较的是所指向的对象的地址
对于equals方法,
注意:equals方法不能作用于基本数据类型的变量
如果没有对equals方法进行重写,
则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,
比较的是所指向的对象的内容。
原文:https://www.cnblogs.com/gxq666/p/9944613.html