--Java 기초 시리즈를 마무리 일반적인 면접 질문

1. 객체 지향 세 가지 특성
객체 지향 세 가지 기본 특성 : 캡슐화, 상속, 다형성,
객체 지향 자바 언어, 클래스의 최소 단위.
포장 : 포장은 모든 외부 세계는 가장 간단한 프로그래밍 인터페이스를 제공, 물건을 숨기기하는 것입니다
상속 : 상속은 기존의 클래스에서 상속되는 정보의 새로운 클래스를 만드는 과정이다
다형성 : 다형성이 허용되는 다른 하위 유형을 말한다 객체는 동일한 메시지에 다르게 반응한다.

2. 개체가 길 만들기
(1) 새로운 문은 가장 일반적인 방법입니다 사용하여 객체를 생성하기
위해서, newInstance () 메서드 또는 java.lang.reflect.Constructor의 java.lang.Class의 클래스를 호출 반사 수단 (2) 사용
(3) 복제 방법은, 대상물이 복제 인터페이스를 구현해야 호출
(4) 항 직렬화 수단 readObject에있어서 java.io.ObjectInputStream의 객체를 사용하는
(5)의 부모 오브젝트가 작성되어 있지 않은 경우, 하위 클래스의 객체를 생성 ......을
하는 이 생성자를 호출되지 않도록 메모리 (3)에 호출 1,2,5- 생성자 기존 개체의 사본 인 오브젝트 (4)는 클래스 생성자를 호출하지 않을 파일로부터 복원되고
에 Class.newInstance 전용 통화 어떠한 기준 생성자;는 Constructor.newInstance는 매개 변수와 개인 생성자를 호출 할 수
직원 EMP = (직원)를 위해 Class.forName ( "com.test.Employee") 위해서, newInstance ();
또는
직원 = Employee.class EMP. newInstance와 ();

생성자 <직원> = Employee.class.getConstructor 생성자 ();
직원 EMP2는 Constructor.newInstance = ();

클론 객체 메소드를 호출 할 때마다에서, JVM은 새로운 객체를 생성, 객체는 전면에있는 모든 내용을 복사한다; 어떤 생성자 호출하지 않는 클론 방식으로 작성된 오브젝트 상기 복제 방법을 사용하여, 우리는 Cloneable 인터페이스를 구현하고 그 정의 복제 방법을 달성하는 데 필요한
고용 EMP3 = (사원) emp2.clone을 ( )

객체를 직렬화하도록 우리는 클래스가 직렬화 가능 인터페이스를 구현하게 할 필요가;
의 ObjectInputStream를 = 새로운 새의 ObjectInputStream에 (새 새 FileInputStream에 ( "data.obj"));
직원 emp4 = (직원) in.readObject은 ();

3. 직렬화와 객체의 탈 직렬화 란, 여기서 사용되는, 방법
자바 직렬화 객체의 데이터 정보를 포함하고, 상기 바이트 순서에 바이트 순서로 오브젝트를 참조하는 직렬화 후의 오브젝트 데이터베이스에 기록 될 수있다 또는 파일은 네트워크 전송에 사용될 수있다. 우리는 캐시 캐시를 사용할 때 일반적이나, 우리는 종종 우리의 엔티티 클래스가 Serializable 인터페이스를 구현받을 필요가 원격 호출 RPC (네트워크 전송) (메모리가 충분하지 않은 공간이 하드 디스크에 로컬 스토리지가있을 수있다), 목적은 당사자의 상호 작용 (직렬화 할 수 있도록하는 것입니다 공통 표준),
궁극적 인 목표는 원래 자바 객체로 복원, 직렬화 직렬화되어야하는 것입니다, 그래서 바이트의 순서는 자바 객체가,이 과정을 역 직렬화 복원 할 수 있습니다 직렬화;
변수가 과도 수정되면, 변수 개체 지속성은 더 이상 액세스 할 수 없습니다 직렬화 후 변수 내용의 일부가 될 수 없습니다. 초기화 통상 반원 변수에 따라 수정 된 영구 객체 직렬화 해제 한 후, 가변 일시적인 것 간주 될 수
없이 변형이 과도인지, 클래스 레벨 때문에 연재되지 정적 변수;
마지막으로, 왜 다른 주로의 저장 공간을 절약하기 위하여, 그것을 직렬화됩니다.

4. JVM 메모리 모델의 원리
자바는 모두 해석 언어는 컴파일 된 언어이다 : 자바 소스 코드는 javac의 명령에 의해 .class 파일로 컴파일되고,이 바이트 코드 파일 만 JVM (자바, 모든 플랫폼에 직면하지 않습니다 가상 머신) JVM 자바는 자바 바이트 코드 프로그램의 인터페이스까지 정확히 같은 제공하는 크로스 플랫폼의 핵심 부분이며, 다른 플랫폼에 대한 적응 아래로 인터페이스가 서로 다른 자바를 사용하여, 특정 플랫폼 별 기계 코드를 제공 명령 인터프리터 실행,
프로그램 카운터, 가상 머신 스택은 기본 방법은, 우리가 재활용을 고려 너무 많이 필요하지 않습니다 오프 스레드 태어난 스레드, 세 지역을 스택, 그래서이 지역의 메모리 할당 및 복구가 확실하게 장착되어 있습니다 상기 방법은 종료되거나 나사 끝에서, 단지 자연 메모리 회수로하기 때문에 문제, 그리고 자바 힙 할당 및 복구 방법 존 영역과 동적 상기 GC의 부분에 초점을 맞출 필요가있다.

5. GC 원칙
가비지 콜렉션을 요청하려면, 관련 개체가 이루어지는 시스템을 () 널 (null) 또는 전화를 설정할 수 있지만 후자는 심각하게, 코드의 성능에 영향을 미칠 것입니다 일반적으로 모든 시간으로 System.gc (명시 적으로 호출) 모두 중지됩니다 때문에 프로그램의 정상적인 작동이 큰 위협을 일으킬 수 있도록 응답, 메모리 재활용 개체를 확인합니다. 또한,이 방법은 JVM의 가비지 콜렉션이 즉시, 바로, 감사 할 줄 모르는 일 쓰레기 수거, 재활용 또는 완전히 특정 JVM에 의해 결정되지로 JVM을 알려 보장하지 않습니다 호출;
쓰레기 수집기가 낮은 우선 순위를 실행하는 별도의 데몬 스레드로 보통, 힙 메모리의 예측할 수없는 상황이 사용하지 않고 오랜 시간이 죽은 삭제 및 재활용,
객체가 살아 있는지 여부를 확인 할 수있는 두 알고리즘이있다 :
(1) 참조 카운팅하지만, 두 물체 간의 상호 순환 참조하는 경우를 해결하는 것은 곤란하다;
(2) 접근 가능성 분석, 주류 (예 : 우리 자바 등) 주류 상업 프로그래밍 언어를 달성하기 위해, 그것은 개체가 살아 있는지 여부를 도달 가능성 분석 알고리즘에 의해 결정된다
더미 이전 신생대 시대와 점, 구체적인 운영 절차 :
새로운 세대가 : 에덴과 두 생존자를 포함, 단지 에덴에서 새로운 객체를 생성, 경험 마이너 GC, 제 1 블록의 에덴 활성 객체 비워 생존자 공간 S0 에덴 이동 될 것이다 에덴 외 영역 다시 가득 다음 S0 다시 제 2 블록 생존자에 공급되는 부 GC 에덴 살아있는 개체 트리거 공간 S1, S0와 에덴, S0와 S1 스위치 역할의 다음 다음 라운드를 클리어 무한히에 이렇게되어 있습니다. 당신이 16 배까지 개체 수를 복사하는 경우, 객체는 이전 시대로 전송됩니다,
가비지 컬렉션 JVM 매개 변수와 관련된 :
-Xms /를 -Xmx - 초기 힙 크기 / 힙의 최대 크기
-Xmn - 힙의 새로운 세대 크기 (도 XX 설정 : newSize와 = XX : MaxNewSize) , . 실제 사용 가능한 공간 생존자 = 에덴 + 1 일, 즉, 90 %
-Xss - 각 스레드에 대한 스택 크기, 일반적으로, 매우 깊은하지, 다음 스택 경우, 1M 확실히 충분 와
-XX : newSize와는 -XX를 / : MaxNewSize은 - 크기 / 신생대 최대 크기의 설정 새로운 세대
-XX : NewRatio - 새로운 세대와 노인의 비율은, 세가 차지, 전체 힙 공간의 1/3의 새로운 세대를 대표하는 2/3
일반적인 쓰레기 수집 방법 :
지우기 표시 방법 : 이것은 가장 기본적인 가비지 컬렉션 알고리즘을 표시하는 두 단계로 구분하고 명확하다, 그것은 개체 다음 태그, 균일 한 재활용 재활용 할 무엇의 생각이다. 이 방법은 매우 간단하지만 효율성은 높지 않다 표시 및 제거 효율이 매우 낮다. 또한 큰 객체가 연속 메모리가 조기에 GC 동작을 트리거 충분하지 후 할당 절차의 결과로, 분리 된 메모리 단편화를 많이 생성,
복제 알고리즘 : 효율의 문제를 해결하기 위해, 메모리 용량에 따라 복제 알고리즘으로 분할 두 등분하고 메모리 부족 후 하나만 사용하는 경우에 상기 제 2 메모리 블록에 상기 복사본 라이브 객체되는 시간 메모리의 클리어 마무리 후, 제 2 블록 후 첫 번째 부분에 개체를 복사합니다. 그러나,이 방법은, 각각의 대략 절반 메모리 낭비하기에는 너무 비싼 메모리가없는 한 다음 알고리즘이 향상되고, 상기 메모리 영역이 더 이상 1 : 1 나눌 있지만, 메모리 (8)로 분할된다 : (1) 1 개 세 부분의 메모리 영역의 더 큰 주 에덴, Survior 영역이라고 개의 작은 메모리 영역 각각의 영역을 우선적으로 사용될되고 나머지 인 에덴 전체 에덴 영역 목적은 제 2 블록의 메모리 영역으로 복사 될 것인지 너무 많은 사람들이이 시간에 살아 객체 경우 생존자가 충분히되지 않도록하고, 에덴 영역을 취소, 이러한 개체는 보증 메커니즘을 할당하여 이전 시대에 복사됩니다;
태그 방법을 구성하는 데이 방법은 마크 통관 방법을 생산하고 해결하기 위해 주로 메모리 조각화 많은 문제. 높은 생존율을 개체를 할 때뿐만 아니라 효율적인 복제 알고리즘의 문제를 해결한다. 이것은 첫번째 목적은 회수의 일단 이동하면, 메모리 단편화가 생성되지 않도록, 끝 테두리 이외의 오브젝트를 지우 후, 해제 대상 다르지만 체류 시간을 증가시킨다;
세대 수집 방법 :하기 이 방법으로 대부분의 가상 머신의 가비지 컬렉션, 그것은 개체, 새로운 세대에 힙과 옛 시대의 라이프 사이클을 기반으로합니다. 신세대 때문에 객체의 짧은 수명, 다수의 객체가 복제 알고리즘의 사용 후 시간이 죽을 때마다 회수있을 것, 차세대 에덴 두 서바이버 기본 크기 비율로 분할 8 : 1 : 1이다. 객체 높은 생존율의 옛 시대, 당신은 법을 조직 또는 통관 방법을 표시하는 태그를 사용할 수 있도록 여분의 공간이, 보증을 할당되지있다.
직접 올드 년에 큰 개체 : 개체 복제가 에덴과 생존자 지역 사이에 발생하는 많은 메모리를 방지하기 위해, 이전 시대에 직접 설정 값보다 큰 있도록 PretenureSizeThreshold : JVM은 두 개의 매개 변수를 -XX 있습니다.
GC의 알고리즘이 전화했을 때 자바가 사용 후 null로 개체를 그냥 null로 스택 참조를 가리 null로 설정 메모리 풋 프린트를 감소하지 않지만 새로운 객체 밖으로는 여전히 힙에 존재하는 스택은 시점까지 기다릴 필요가 없습니다 개체 손실 복구합니다.

6. 자바 클래스의 컬렉션
자바 설정, 목록, 큐,지도 시스템 네 가지 종류의 세트로 나눌 수 있습니다;
설정 : 대표 장애는 반복하지;
목록 : 대표 질서와 반복,
큐 : 큐가 나타내는 세트 달성하기 위해,
지도하는 것은 : 매핑 세트를 나타냅니다.
; 수집 및지도, Collection 인터페이스 상위 인터페이스 설정, 목록, 대기열 인터페이스입니다 : Java 인터페이스의 두 세트가 밖으로 파생되는
설정 컬렉션 추가, 사실,이 컬렉션 세트입니다 제공 할 다른 방법이 없다, 기본적으로 동일로,하지만 약간 동작 서로 다른 중복 요소를 포함하지 설정, 두 번째 작업이 실패 false를 반환 추가 할 것, 두 번 같은 개체의 컬렉션에 추가
목록 수집 요소를 반복 요소가 지정된 위치의 인덱스를 통해 액세스 할 수의 사용을 허용,
지도와 세트 사이의 관계를 : 함께 넣어 모든 키의지도를 보면, 그들은 (모든 키는 키와 키 사이에 반복하지 않는, 주문하지 않은)를 설정 모음을 구성, 실제로지도 키 집합 방법을 포함하지 않습니다, 모든 주요 반환지도의 사용자 모음으로 구성된 세트;
관계의지도와 목록 : 맵의 모든 값이, 그들이 목록 요소와 요소 사이에 반복 될 수있다을 형성 함께 넣어 볼 경우, 각 요소는 인덱스를 찾을 수 있지만, 인덱스가 사용지도 정수 값에 더 이상 하지만, 인덱스와 같은 다른 객체.

ArrayList를 LinkedList의 7. 차이는
둘다 null 요소를 허용
내부 ArrayList의 구현은 내부 동적 배열 객체 [] 그래서 개념적 더 배열처럼 기반으로하지만 구현은 연결 세트의 내부 LinkedList의 기록에 근거 그것은 연결리스트 구조와 같은 더 많은 그래서. 더 적합 GET 및 SET를 ArrayList와, LinkedList의 자연 이중 연결리스트는 포인터의 머리의 움직임을 발견하고, ArrayList를 직접 일련 번호 요소에 의해 색인을 생성 할 수 있습니다 필요가 있기 때문에, LinkedList의 더 적합 추가 및 ArrayList에 데이터를 이동해야하기 때문에 배열 끝이 직접 또한 속성을 추가 (제거 높은 첨자에 따라 삽입하면 요소를 제거하지만, 우리는 Arrays.copyof 기능, 성능 열화)에 의해 영향을받는 일부 요소를 이동해야;
ArrayList를 언제 적절한 확인 ensureCapacity 방법이라고 할 데이터를 증가시키기 용량. 용량이 충분하지 않을 때 충분하지 않은 용량을 직접 새로운 배열 요소로 복사 Arrays.copyof 방법 다음에 원하는 용량을 설정하는 경우, 새로운 용량은, 기존의 1.5 배의 용량 (10 기본 용량)으로 설정된다. 용량이 충분하지 않은 경우에 따라서 요소를 추가 할 때마다 소모 새로운 배열, 아주 시간에 원래의 요소를 복사, 따라서 요소의 수, 그렇지 않으면 LinkedList의를 사용하는 경우 사전에 알고에서의 ArrayList를 사용하도록 제안합니다;
폐기물의 공간의 ArrayList를 LinkedList의 공간 지출의 각 요소에 반영하면서 주로 목록이 목록의 끝에 특정 용량 공간을 기록 밀도에 상당한 공간을 소비해야 보호구, ArrayList를가 LinkedList의보다 나은;
조작이 아니라 전면보다 또는 중간에 데이터 열 뒤에 데이터를 추가 할 수 있으며 동작은 전방 또는 중간 데이터 또는 추가 될 때의 ArrayList를 사용하면, 더 나은 성능을 제공 할 것이다 요소 랜덤 액세스를 요구하는 경우, 요컨대 당신이 순서대로 요소에 데이터 액세스를 삭제할 때, 당신은 LinkedList의를 사용해야합니다.

HashMap의 항 이해
. (1) 상기의 HashMap 키 기능 신속 값으로 발견 할 수있는 능력이다
HashMap에 기초하여 어레이가, 상기 메모리 어드레스와 같은 메모리 어레이와 같은 인덱스 배열 해시 테이블을 구현하기 위해 (2) ]
. ( 3) HashMap의 각 항목에 대한 기록이다 <K는 V> 개체의 키 값, 해쉬, 다음 네 개의 구성 요소를 포함하는, 어레이 오브젝트에 저장된다
. (4) 해시 함수를 HashMap에 대해 (제 넣어) 키가 비어있을 때, 상기 방법을 putForNullKey 소자에 의해 바로 시작 위치 (테이블 [0]), 또는 가치 해시 코드있어서 키 (INT 해시 = key.hashCode ()로 전송 ;) 하고 이것을 사용 어레이의 길이를 갖는 해시 코드 동작이 값 배열 엔트리 (첨자) 내의 위치에 저장되는 구 나타내는 int
(. HashMap의이 충돌 해결 5) 사슬 어드레스 방법을 각 객체는 다음 포인트리스트를 링크 기준 엔트리를 갖는다 다음 항목 (체인의 길이가 레드 - 블랙 트리 넣어 목록으로 변환 임계 값 8을 초과하는 경우, 목록 (6)의 길이보다 작가, 레드 - 블랙 트리 목록을 다시 넣어),
(6) HashMap의 요소를 작성 : 기본 0.75 (HashMap의 증설 여부를 결정하는데 필요한는 원래 디폴트 HashMap의 길이는 16 회까지 확장);
(7)의 HashMap GET 작업 : 키가 비어있는 경우, 제 1 해시 테이블 룩업 테이블 [0]에 대응하는 획득 한 후, 키 또는 계산 된 해시 값 (배열 첨자)에있어서, 상기리스트에 대응하는 직접 위치 입력 한 다음, 그렇지 않은 경우는 null이 get 메소드에 의해 반환되는 HashMap의에서 (널 (null)을 반환, 그렇지 않으면 당신이 그것을 찾을 때까지 목록을 통과, 같은 값을 동일 의해 반환, 키, 해시 값이나 same're과의 비교를 찾고 여부 항목을 결정 이것은) containsKey 방법 필요한 키가 null로 대응 될 수 있고, 상기 방법은 해시 MAP받을 키의 존재 여부에 의해 결정될 수 없으며, HashMap의 키 않을 수있다
. ( 8)의 HashMap 스레드 안전하지 않은, 멀티 스레드 동시에 환경과 ConcurrentHashMap의 계약 하에서 사용하거나 다음 초기 모드를 사용할 수있다 : M이 =에는 Collections.synchronizedMap 맵 (HashMap의 새로운 새 (...))
(9). HashMap의 직렬화 인터페이스 지원 직렬화 구현 구현 Cloneable을 인터페이스는 복제 될 수있다.

9. equals 메소드로 hashCode의 관계가
존재 hashCode 메소드가 호출의 수, 프로그램의 효율을 향상시키는 방법과 동일 감소시키는,
참으로 동등한 방법, 오브젝트 해시 코드 두 값이 동일해야하는 경우 결과를 얻은
결과가 얻어지면 equals 메소드 거짓 개의 상이한 개체 반드시 해시 코드이고;
두 객체의 해시 코드 값에 이르는 경우가 발생한다 방법이 거짓 같으며
두 값이 동일한 개체 해시 코드 인 경우, 공지 된 방법에 의해 얻어진 결과와 동일.
equals 메소드를 재 작성하면 해시 코드 메소드를 재정의해야합니다.

10.의 HashMap과 해시 방법의 차이점은
(1) 두 저장 구조 충돌 해상도는 동일하다
(2) 기본 지정된 용량없이 11 해시이며 HashMap에 16이고 바닥 해시를 요구되지 어레이의 용량은 2의 정수 제곱이어야하고 HashMap의 2 어떤 정수 능력을 요구한다
. (3)에 해시 키 값으로하는 것이 허용되지는 HashMap에있는 키 값 (NULL 허용 null인지 하나의 키 값의 복수가 있고, 널) 널 있지만 해시 테이블의 동작과 유사한 풋 (NULL, NULL)는 컴파일러는 이와 같은 키 및 값을 가질 수있다 경우 Object 타입이지만 런타임 는 NullPointerException이 발생된다
(4) 해시 확장은, 용량이 2 회 일본어 +1이되고, HashMap의 팽창 동안, 용량이 2 회 일본어된다]
. (5) 해시 계산 된 해시 값을 상기 키의 직접 사용 해시 코드 () 및 HashMap의 해시 키 값을 계산, 평가시와 동작으로 모듈로 연산을 이용하여, 인덱스의 해시 값에 대응하는 위치를 찾는 경우 해시 테이블, 그리고 HashMap의 위치 인덱스는, 제 1 및 총칭하여 본원 상기 해시 0x7FFFFFFF 및 후 길이 계산 객체 음 해시 값이 양수로 변환하는
HashMap의 해시 테이블이 방법은 잘못된 때문에 (비교 값이 같은지 여부) 메소드에 포함 제거 (6). 2 개의 containsKey 클래스 방법을 포함으로써 containsValue]
. (7) 해시 테이블 스레드 안전 HashMap에 비 스레드 안전하다.

(11) 어레이와의 연결리스트 차이
기능의 배열은 :
(1) 메모리 어레이의 배열 인덱스 0에서 시작 인덱스를 통해 액세스되는 연속 영역이다
(2) 처음 사용 계정 어플리케이션 메모리 크기 전에 예비 공간 배열이 낭비 될 수있다 메모리 공간은,
(3) 낮은 삽입 및 데이터 효율의 삭제, 데이터가 삽입되어,이 후자는 다시 위치 데이터를 메모리로 이동해야하며, 데이터가 삭제되고, 후자의 데이터는 전방으로 이동해야한다
(4) 임의 배열이 연속이기 때문에 높은 독서 효율, 각 데이터의 메모리 주소를 직접 지정 데이터를 찾을 수 있습니다 알고
(5) 확장에 도움이되지 않습니다, 배열 충분한 공간과 사본이없는 경우 새로운 배열의 정의를 다시 정의 할 필요.
어레이의 이점 :
(1) 랜덤 액세스 강
(2)의 속도 찾기
단점 어레이 :
(1) 낮은 삽입 및 삭제 효율 인해 다른 요소의 이동에
메모리의 낭비 일 수있다 (2)
(3)의 메모리 공간 요구 사항이 높은을 충분히 연속적인 메모리 공간이 있어야한다
(4) 상기 어레이의 크기는 고정이며, 동적으로 확장 할 수없는
응용 시나리오 :
(1) 빈번한 질의는, 저장 공간이 거의 첨가하지 않고 상황을 삭제하지 않아도된다.
기능 목록 :
(1) 메모리에 연속 필요로하지 않습니다 어디있을 수 있으며
이 주소에서 다음 데이터를 찾기 위해, (2) 각각의 데이터는 다음 데이터의 저장 메모리 주소입니다
(3) 데이터를 높이고 데이터를 삭제하기 쉽다
그들이 첫 번째 데이터에서 시작해야 임의 접근성, 위치 데이터에 액세스 할 수 없기 때문에 (4), 데이터가 비효율적 찾기 위해,
(5), 쉽게 확장 목록의 크기를 크기를 지정하지 정의하지 않고 데이터가 추가되거나 삭제 될 수있다.
장점 목록 :
(1) 삽입과 삭제 속도
낭비 메모리없이 (2) 높은 메모리 이용 효율
(3) 크기가 고정되어 있지, 유연한 확장
(4) 초기 용량이 필요하지 않습니다
단점 목록 :
(1) 비효율적 찾아야합니다 첫 번째 이송에서 무작위로 찾을 수 없습니다
(2) 포인터 필드의 큰 숫자를 포함하고 있기 때문에, 공간을 큰
응용 프로그램 시나리오 :
자주 장면 작업을 추가, 삭제해야 할 데이터의 작은 (1) 양.

12. 클래스 로딩 프로세스의 이해
는 JRE / lib 디렉토리 /의 rt.jar에 해당하는 BootStrapClassLoader,
ExtClassLoader는 제 3-2 JRE / lib 디렉토리 / EXT / * 항아리에 해당하는
클래스 경로에 의해 지정된 모든 병 또는 디렉토리 (기본 클래스 로더)에 해당하는 AppClassLoader,
부모 위임 메커니즘 :
클래스 로더는 클래스 로딩 작업을 수신 할 때, 로딩 될 때까지 즉시 확장되지 않지만, 같은 방식으로 사용하는 각 계층의 클래스 로더를 수행하기 위해 부모 클래스 로더에 위임 작업을로드합니다 최상위 클래스 로더를 부팅 위임. 부모 클래스 로더는 클래스가 위탁로드 할 수없는 경우, 작업 부하를 수행하기 위해 다음 단계의 클래스 로더에 반환 된 클래스를 넣어로드합니다.

작성하고 거래를 제출 JDBC를 사용하는 방법 13. 자바

코네티컷 주 = null의 경우는 java.sql.Connection; 
java.sql.PreparedStatement에의 STMT = NULL; 
은 try { 
    코네티컷 DriverManager.getConnection를 = ( "JDBC : 오라클 : 얇은 :,의 @ 호스트 : 1521 : SID를", "사용자 이름", "는 passwd를"); 
    true로 설정하면 // 자동, 데이터베이스가 데이터를 트랜잭션이 확인 될 때마다 업데이트하고 자동으로 제출, false로 설정 제출 
    (false로) conn.setAutoCommit를, 
    STMT = conn.createStatement (); 
    // 계정 (500)의 양을 감소 
    stmt.execute를 ( "업데이트 t_account의 SET 양 양 = - ACCOUNT_ID = 'A가'500"); 
    //이 증가 B의 양을 500 계정 
    stmt.execute를 ( "업데이트 t_account의 SET 금액 금액 + = 500 WHERE = ACCOUNT_ID 'B' "); 
    // 트랜잭션 커밋 
    conn.commit를 (); 
} 캐치 (예외 E) { 
        conn.rollback ();
마지막} { 
    stmt.close ();
    conn.close (); 
}

 
어떻게 다중 상속 자바 달성하는 방법 (14)
에 직접 코드, 다중 상속을 구현할 수있는 내부 클래스를 :

공용 클래스 테스트 { 
    private 클래스의 MyCall은 전화 {확장 
        
    } 
    개인 클래스 MySendMessage이 sendMessage 첨부를 확장 { 
        
    } 
    개인 MyCall 호출 = 새로운 MyCall을 (); 
    개인 MySendMessage 에스엠 = 새로운 MySendMessage (); 
    
    공공 무효 전화 (문자열 PHONENUMBER) { 
        call.call (PHONENUMBER); 
    } 
    공공 무효 센드 (문자열 PHONENUMBER) { 
        sm.send (PHONENUMBER); 
    } 
    
    공공 정적 무효 메인 (문자열 []에 args) { 
        시험 t = 새로운 테스트 (); 
        t.call ( "110"); 
        t.send ( "119"); 
    } 
} 
클래스 호출 { 
    공공 무효 호출 (문자열 PHONENUMBER) {
        에서 System.out.println는 ( "숫자 전화 :"+ PHONENUMBER을); 
    } 
} 
클래스 sendMessage 첨부 { 
    공공 무효 전송 (문자열 PHONENUMBER) { 
        에서 System.out.println ( "숫자 보내 :"+ PHONENUMBER을); 
    } 
}

 
15. 문자열은 모두 StringBuilder는 StringBuffer와 비교
주요 차이점은 세 개의 클래스가 안전한 속도 스레드이다;
속도 : 모두 StringBuilder>의 StringBuffer> 문자열
이유 : 모두 StringBuilder와 StringBuffer를 가변하고, 문자열 상수, 문자열 STR = "ABC"만약, STR +는 "드"는 ;, STR은 ABC, JVM 후 새로운 객체 "ABCDE"를 생성하는 초기화 =이 새로운 객체 str에 할당되고, 일본어 "ABC"는 가비지 컬렉션기구 복구하므로 조작 실제 문자열 오브젝트 것 A는 끊임없이 새로운 객체와 오래된 객체 프로세스를 재활용 생성에, 그리고 모두 StringBuilder와 StringBuffer를 직접 변수 변경됩니다의 작동을 대상으로 생성 및 복구 작업을 포함하지 않습니다
문자열 STR = "ABC를"+ "드"; / / 역할 및 운영 문자열 STR = "ABCDE"; 같은, 곧 될 것입니다,
문자열 인 str1 = "ABC"과 str2 = "드"; str1이 = str1과 +과 str2; //이 작업은 매우 느린 것이다
스레드 안전 : 모두 StringBuilder 스레드 안전하지 않고, StringBuffer를 스레드 세이프이다
문자열 :; 문자열 조작 소량 적용
: 단일 스레드에 적합한 문자 모두 StringBuilder 적색 영역에 여러 가지의 경우,
StringBuffer에 다음 문자 버퍼 하에서 동작에 적합한 멀티 스레드 다수의 경우.

(16).


에서 System.out.println (i.ToString ());
에서 System.out.println (가지는 Integer.toString (I))
에서 System.out.println (한 String.valueOf (I));
문자열 정수로 변환 :
문자열 = STR " ... ";
정수 I = 널 (null);
IF (STR = 널!)는 {
    나는 = Integer.valueOf (STR);
}
(생성자를 사용할 수있다)

17. 어떤 기능 자바 공간 제거 문자열
트림 : 머리와 꼬리를 제거 공간;
바꾸, 포함한 중간 모든 공백을 제거; oldchar는 newChar에 대체된다
STR = str.replace를 ( "", ""); // 모든 공백을 제거;
완전히 대체가 모든 공백을 제거; 파라미터 정규식 (정규식),
STR = str.replaceAll ( "\\는 S *", ""); // 공간에 한정되지 않고, 대부분의 공백 문자 대체,
STR = str.replaceAll를 ( "+", ""); / / 모든 공백을 제거,
\ S 공백, 탭, 빈 페이지 나누기 문자 등의 일치합니다.

자동 권투와 언 박싱의 18 원칙
오토 박싱 : 범위의 값이 127 -128, 메모리에 캐시 될 경우 INT의 값에 할당 된 정수 객체는 Integer.valueOf 메소드 호출은,이 범위 내에 있지 않으면 새 정수로 이동 객체입니다.
자동 언 박싱 :; 특수와 == = 이진 연산자 및 패키지 유형이나 기본 유형 패키지 유형에 작용하는 이항 연산자가 언 박싱 원인이됩니다는 언 박싱 본질은 방법있는 intValue를 호출하는 것입니다! 비교 식 (즉, 상기 연산) 또는 = ==, 먼저 두 가지 유형 또는 = == 동작 포장 비교 ;! 후 직접 비교를 처리하고, 동작을 풀고 유형을 포장한다!

19. 기준값 전달 원리로 전달되는
원래 값의 사본을 수신하는 기능을하고, 동일한 두 개의 기본 유형 즉,가 파라미터 실제 파라미터, 후면의 동작 방법은 상기 파라미터에있는 메모리에 저장 : 값 전송 변화가 실제 파라미터 값에 영향을주지 않고,
기준 전송 : 함수는 동일한 메모리 어드레스를 수행하도록 실행, 동일한 형상과 실제 파라미터 콘텐츠 시점의 공정에서, 원래 값의 메모리 어드레스를 수신하고, 상기 기준의 동작 방법에 그것은 실제 객체에 영향을 미칠 것이다
공개 무효 스왑 (X 학생 학생 Y) {
    학생 TEMP = X,
    X = Y,
    Y = TEMP;
}
실행 교환 방법 :
(1)을 대상물 (A)는 (B)는 X에 복사 ; y는 x는, 같은 물체 A, B,이 시점에서, Y는 같은 객체 참조
(2)에있어서, 상기 스왑 X, Y 교환, A, B를 완료되지하고 변하지 않는
, X, Y, 더 이상 (3) 상기 방법이 완료 사용하는, 여전히 객체를 가리키는 전에 b를,
요약, 자바는 매개 변수 전달 모드 : 전송 값.

상기 커버 (20)에있어서 과부하의 방법에 비교
메소드 오버로딩은 : 다형은, 컴파일러가 방법에 따라 파라미터의 유형을 선택할 수있는 경우, 컴파일 시간에, 컴파일러가 호출된다
(재기록)을 덮는 방법은 : 실행시에 발생하기 때문에, 다중 - 상태 동작이라 모르는 컴파일러를 컴파일하고 호출하는 방법을 알 수 없다, JVM 런타임 코드가 결정을 내릴 것,
규칙 같은 "두"메소드 이름은 "큰 두 개의 작은 두 개의"을 수행 할 수있는 방법을 다시 작성, 동일한 파라미터리스트는, "두 개의 작은"서브 클래스의 메소드는 반환 값의 타입 또는 상위 클래스의 방법의 유형과 같 방법 선언 슬로우 서브 클래스 예외 클래스 클래스있어서 작은 상위 클래스 선언보다 던 것보다 작아야 값을 리턴 상당; "큰"는 상위 클래스의 방법 또는 등가의 권한보다 커야 서브 클래스의 메소드 액세스를 말한다 특히, 중 오버라이드 방법, 및 어느 하나의 방법에 의해 피복하는 클래스 방법임을 유의해야 모든 인스턴스 ; 방법은없는 클래스 메소드는 인스턴스 메소드입니다
같은 이름, 같은 방법 이름, 다른 매개 변수 목록 : 단지와 메서드 오버로드 "같은 두 가지"에 대한.

추상 클래스 인터페이스 (21)의 비교는
(1) 인터페이스 필드 방법 공개 추상 공용 static 최종 개시된다 추상 클래스 private 멤버와 방법이있을 수있다 생성자있다
(2) 인터페이스는이 - A를 갖는다 의 관계; 추상 클래스는 관계-A이며
, (3) 클래스를 상속받을 수 있지만, 구현 될 수있는 복수의 인터페이스
; 추상 클래스 다음 구현 클래스 다음 (4) 일반 애플리케이션, 최상층 인터페이스이고,
( 5) 예를 들면 : 우리는 경고 알람 기능을 추가 할 경우, 도어 개폐 기능을 갖는는 가장 좋은 방법은 오픈 추상 클래스 문, 및 포함 가까운 방법을 설계하는 것입니다 인터페이스 방법에있어서 경보를 재 설계, 문을 열 것으로 닫을 방법이 반드시 알람 기능 알람 기능은 문에 필요는 없다없는 알람의 개방성이 같은 수준에있는 것이 아닙니다; 문이에 대한 것은 문에 대한 알람 관계, 개폐-A는 갖는다-관계이다.

22. 일반 역할
Java1.5 모든 컬렉션 인터페이스를 사용하고, 일반 소개한다. 작업 :
(1) 제네릭은 모음으로 저장할 수있는 객체의 유형을 제공하기 위해, 그래서 당신은 요소의 다른 유형을 추가하는 경우,이 컴파일시에 불평 할 것이다 우리를 할 수 있습니다, 당신이 있기 때문에,이 실행시에 ClassCastException이 방지 오류 정보를 얻을 시간을 컴파일;
(2) 일반 코드를 청소되도록, 우리는 명시 적 변환 및 instanceof를 연산자를 사용하지 마십시오.

23. 반복자 (반복자) 란
, 반복기가 목적, 디자인 패턴이며, 선택된 표적 서열을 통과 할 수 있고, 현상 서열의 기본 구조를 이해할 필요가 없다
, java.lang.Iterable 인터페이스 ; 컬렉션 상속
반복자 세트와 방법은 인터페이스 목록에 정의되어 있지만 반복자 인터페이스 목록 (또는 구현 클래스) 존재,
반복자는 방법을 추가하도록, 개체가 목록에 추가하지만, 반복자하지 될 수
반복자와 반복자 hasNext하고 다음 두 가지 방법은, 시퀀스가 다시 이송하기 위해 구현 될 수 있지만, 수 반복자 반복자 hasPrevious 이전 방법은, 역방향 (순방향 순서) 탐색이 구현 될 수있다
반복자 인덱스가 현재의 위치를 찾을 수 있고,은, nextIndex 및 previousIndex의에게 구현 될 수있다 , 반복자는이 기능이없는,
개체를 삭제 실현 될 수 있지만, 반복자는 목적을 달성 할 수있는 수정 Iierator 만 통과, 방법이 달성 될 수 설정, 수정할 수 없습니다. 

비해 24 오류 예외
자바 모든 오류의 Throwable는 두 개의 서브 클래스, 오류 및 예외를 가지고, 부모가 단순히의 Throwable 인 객체로 패키지,
오류의 Throwable의 서브 클래스, 합리적인 응용 프로그램 (JVM)이 심각한 문제를 잡으려고하지 않도록 표시하는 데 사용됩니다 ;
; 예외와 그 서브 클래스는 보통의 어플리케이션 (JVM)을 캡처 할 가능성이있는 상태를 나타내는 Throwable의 한 형태
의 RuntimeException없이 자바 가상 머신 이상 슈퍼 클래스의 정상 작동 중에 발생 될 수 있습니다 에서 설명한가 발생합니다. 또한 체크 예외 (체크되지 않은 예외) 호출의 RuntimeException는 (예외의 나머지는 예외를 체크 됨) 때문이 아니라 비정상적인 때문에 과실 착오로 인해 비정상적인, 프로그래머를 체크 할 필요가 없다;
예외 검사 : 정의 방법 당신은 모든 체크 예외가 발생할 수 있습니다 선언해야 할 때, 당신은이 메서드를 호출 할 때, 그렇지 않으면 그것을 아래로 전달합니다, 캡처해야합니다.

멤버 변수와 로컬 변수 25. 비교
멤버 변수 : 힙의 멤버 변수 객체에 저장되고 상기 외부 클래스 변수 내에 정의에있어서, 상기 가비지 컬렉터 재활용 책임이다
로컬 변수 : 내부 메소드 나 변수 정의 문 블록 공식 매개 변수는 로컬 변수, 로컬 변수 스택 메모리에 저장되는 데이터이다. 지역 변수 스택 메모리는 방법의 실종과 사라, 당신은 액세스 지정자를 사용할 수 없습니다.
명시 초기화없이 멤버 변수, 로컬 변수로 매개 변수, 로컬 변수의 방법은, 로컬 변수는 블록 파라미터에 부가하여, 로컬 변수를 명시 적으로 초기화되어야한다.
동일한 클래스의 멤버 변수 범위는 클래스가 클래스 짝수 필드, 필드이며, 동일한 이름의 두 멤버 변수를 정의 할 수없는 클래스 전체에 걸쳐 유효도 일례이며,
방법은 동일한 이름을 가진 두 개의 정의 될 수 없다 로컬 변수는 로컬 변수의 방법 인 경우에도, 코드 블록은 국소 변수 또는 파라미터는 작동하지 않는다
동일한 이름의 로컬 변수 및 멤버 변수에있어서, 로컬 변수가이 방법에 덮여 멤버 변수를 참조 할 필요가있는 경우,이 (예를 필드에 대한)를 사용하여, 멤버 변수를 재정의하거나 경우 자바, 로컬 변수 및 동일한 이름의 멤버 변수를 허용 멤버 변수에 대한 액세스를 제한하는 호출자 (클래스 필드) 클래스 이름.

추천

출처www.cnblogs.com/yuanfei1110111/p/10991596.html