1、カスタム注釈
@targetは、
コンストラクタ、メソッド、フィールド、パッケージ:改変対象範囲の注釈を説明し 、種類などを。
@Retentionは
予約注釈、ソース(ソース・ファイルの保持)、クラス(クラス予約)、(アクティブランタイム)ランタイムの時間長を規定します。
@inherited
特定のタイプが継承マークされています。@inherited注釈を持つクラスをマークし、その後、彼はまた、このコメントのサブクラスを持っています。
@documentは、
Javadocを生成するために注釈を修正しました。
2、内部クラス
- 内部クラス、匿名内部クラス、静的な内部クラス、ローカル内部クラスのメンバー:内部は、カテゴリに分け。
- クラス外のクラスメンバ変数の内部部分は、最初のクラスは、外部負荷インナークラスをロードするための静的内部クラスに加えて、他のクラスは、静的変数または静的メソッド内部を持つことができません。
理由:- static変数クラスローダは、クラス内のオブジェクトへの直接参照基準シンボルを交換しないと、この時点でする必要がある場合。
- 内部クラスは、外部クラスのインスタンスに直接使用することはできませんしません。
2.1なぜ静的内部クラスは静的定数を持つことができます
静的定数の値は、コンパイル時に決定されるので、それは一定のプールに保存され、そしてプール定数へのアクセスは、クラスをロードするために常に必要です。
2.2、使用シナリオ内部クラス
- 多重継承の効果を達成するために
アクセス制御は、唯一の外部クラスによって呼び出すことができます
3、自動包装開梱
- 基本タイプと型の間の基準変換。
- コレクションは、オブジェクトのみを受け入れます。
オブジェクトが自動的に超えるように変換された後にキャッシュラッパークラス、floatとdouble値に値がキャッシュされないの値、整数、およびロング・キャッシュは、-128〜127であることに注意してください。パッケージの2種類を比較するときに使用する必要が等しいです。
図4に示すように、文字列理由は、最終的な、のStringBuilderとのStringBufferの間の差であります
- String定义成final类型表示不能被继承,确保不会在子类中改变语义。
每次对string对象的改变相当于重新生成了一个新的string对象。经常改变的字符串不建议使用String。 StringBuffer是线程安全的, StringBuilder是非线程安全的。
5、transient
- 被标记的成员变量不参与序列化过程。
只能修饰成员变量,不能修饰类和方法。
6、如何进行序列化
- 实现Serializable接口。
- 序列化使用输出流进行writeObject。
反序列化使用输入流进行readObject。
7、如何实现对象克隆
- 实现Cloneable接口,并重写clone方法。
- 也可通过序列化方式进行深拷贝
- 一般实际使用过程中我们只需要拷贝对象的属性,通常使用BeanUtils.copy()
这种拷贝都是浅拷贝 几种拷贝对象的性能
cglib>Spring>apache, 一般不建议使用apache的因为对象转换会出错,Spring的date类型转换也可能会出错。8、异常
8.1、Error
系统级别的错误,程序不必处理。出了错误之后只能退出运行。
8.2、Exception
- 需要进行捕捉或者程序处理的异常。
Exception分为运行时异常和受检异常
RuntimeException包括:空指针异常,数组下标越界,classNotFound,类型转换异常等等。
受检异常指:编译器要求方法必须声明抛出可能发生的受检异常。9、Object中的finalize方法
如果类中重写了finalize方法,当该类对象被回收时,finalize方法有可能会被触发。