java2019. 9. 15. 21:00

static 유무의 차이
1, static nested 클래스 

-> 논리적으로 묶기 위해, class의 내부에 존재하며 outer 클래스의 접근은 여타 클래스와 동일

-> 차이점으로 static 멤버의 경우 Outer -> Inner , Inner -> Outer 모두 private static 멤버는 접근가능함.

 

 


   : nested 클래스 안에 nested class 생성 불가
   ex)아래와 같이 사용 불가


public class Test{
		class A{
			class B{
			}
			static class C{  
			//The member type C cannot be declared static; static types can only be declared in static or top level types
			}
		}
	
   }
 
 
 

2, inner 클래스
a, local inner class (내부 클래스)
b, anonymous inner class(익명 클래스)

-> Outer 클래스의 private 한 요소들을 참조 가능하다. 

 

public class A {
	

	
	private int A = 10;
	
	private static final int staticA = 10;
	

	
	private void foo() {
		System.out.println("A");
	}

	class B {
			public void printPrivateMember() {
			System.out.println( A);//print private A's method 
			foo();//call A's private method
		}
	}

	
	static class C {
		private static final int staticC = 30;
		public void print() {
			System.out.println("C : "+ staticA);//외부의 private한 static 멤버 까지 참조 가능.		
		}
	}
	
		
	public void print() {
		System.out.println("A : "+ C.staticC);//반대로 내부의 private한 static 멤버 까지 참조 가능.		
	}
}

 

 

출처 : 자바의 신

Posted by easy16
java2019. 9. 15. 20:25

각각 쓰임새가 다르다. 

구체적인 사항은 개발 하면서 파악.

 

1, StringBuilder : Normal (No thread safe)

2, StringBuffer  : Thread Safe

3, CharSequence : when receving parameters ( 메모리 및 속도면에서 유리할 것으로 추측 )

*StringBuilder 나 StringBuffer 모두 append 사용가능하며 메소드도 거의 유사

 

출처 : 자바의 신

'java' 카테고리의 다른 글

Deprecated, SuppressWarnings 예시  (0) 2019.09.15
Nested class의 개념  (0) 2019.09.15
throws 명령어와 예외 처리 방법 두가지  (0) 2019.09.15
Throwable 및 stack trace의 이해  (0) 2019.09.15
try-catch finally  (0) 2019.09.15
Posted by easy16
java2019. 9. 15. 17:31

 

ex1) exception handle

	public static void main(String [] args) {
			
		TestApplication test = new TestApplication();
		test.A();

	}

	private void A() {
		B();
	}
	
	private void B() { //2, 넘어온 Exception을 try-catch 처리 해 준다.
		try {
			C();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	private void C() throws Exception { //1,throws를 통해 호출하는 메소드로 exception handling을 미룬다.	
		throwable();
	}
	
	
	private void throwable() throws Exception {
		throw new Exception("I'm exception!"); 
	}

 

ex2) Runtime exception의 경우, 명시적으로 throws를 사용하지 않아도 문제가 되지 않는다.


	public static void main(String [] args) {

			

		TestApplication test = new TestApplication();

		test.A();



	}



	private void A() {

		B();

	}

	

	private void B() { //2, 넘어온 Exception을 try-catch 처리 해 준다.

		try {

			C();

		} catch (Exception e) {

			// TODO Auto-generated catch block

			e.printStackTrace();

		}

	}



	private void C() /* throws RuntimeException */ { //1,throws를 통해 호출하는 메소드로 exception handling을 미룬다.	

		throwable();

	}

	

	

	private void throwable() throws RuntimeException {

		throw new RuntimeException("I'm exception!"); 

	}



 

 

출처 : 자바의 신

'java' 카테고리의 다른 글

Nested class의 개념  (0) 2019.09.15
StringBuilder, StringBuffer, CharSequence 용도  (0) 2019.09.15
Throwable 및 stack trace의 이해  (0) 2019.09.15
try-catch finally  (0) 2019.09.15
enum class 활용법  (0) 2019.09.14
Posted by easy16
java2019. 9. 15. 17:22
	public static void main(String [] args) {
			
		TestApplication test = new TestApplication();
		test.A();

	}

	private void A() {
		B();
	}
	
	private void B() {
		C();
	}
	private void C() {
		throwable();
	}
	
	
	private void throwable() {
		int [] intArray = new int [5];
		
		try {
			intArray = null;
			System.out.println(intArray[5]=1);
		}catch (Throwable t) {
			System.out.println("getMessage() : " + t.getMessage());
			System.out.println("toString() : " + t.toString()); //toString은 getMessage보다 더 자세하게 예외의 내용을 출력
			t.printStackTrace(); //호출된 함수의 역순으로 결과가 출력된다.
			
		}
		
		System.out.println("outside");
		
	}


 

 

 

결과 : 

getMessage() : null
toString() : java.lang.NullPointerException
java.lang.NullPointerException
at com.test.testapplication.TestApplication.throwable(TestApplication.java:46)
at com.test.testapplication.TestApplication.C(TestApplication.java:37)
at com.test.testapplication.TestApplication.B(TestApplication.java:34)
at com.test.testapplication.TestApplication.A(TestApplication.java:30)
at com.test.testapplication.TestApplication.main(TestApplication.java:15)
outside

출처 : 자바의 신

'java' 카테고리의 다른 글

StringBuilder, StringBuffer, CharSequence 용도  (0) 2019.09.15
throws 명령어와 예외 처리 방법 두가지  (0) 2019.09.15
try-catch finally  (0) 2019.09.15
enum class 활용법  (0) 2019.09.14
interface와 abstract 차이  (0) 2019.09.14
Posted by easy16
java2019. 9. 15. 17:01

finally -> 예외 발생 여부와 관계없이 실행, 코드의 중복을 피하기 위해 반드시 필요?

 

무슨 의미?

 

파일 입출력에서는 예외발생과 관련없이 close를 해야겠지만..

굳이 finally 블록을 사용할 이유가 있나?

 

 

출처 : 자바의 신

'java' 카테고리의 다른 글

throws 명령어와 예외 처리 방법 두가지  (0) 2019.09.15
Throwable 및 stack trace의 이해  (0) 2019.09.15
enum class 활용법  (0) 2019.09.14
interface와 abstract 차이  (0) 2019.09.14
final class, final method, final variable  (0) 2019.09.14
Posted by easy16
java2019. 9. 14. 15:06

 

enum class


//값이 필요 없는 경우

 

public enum OverTimeValues {	
	A,
	B,
	C;
}


//값을 할당하여 사용하는 경우, 최초 사용 시, 각 enum value마다 한번씩 생성자가 호출된다.
//이후 호출 시에는 생성자가 호출되지 않음.


public enum OverTimeValues {
	
	
	A(1000),
	B(2000),
	C(3000);
	private final int am;
	
	
	OverTimeValues(int am) {
		System.out.println("Ctor called : "+ am);
		this.am=am;
	}
	
	public int getAmount() {
		return am;
	}

}


	public static void main(String [] args) {
			
		TestApplication test = new TestApplication();
		
		
		enumTest(OverTimeValues.A);
		enumTest(OverTimeValues.B);
		enumTest(OverTimeValues.C);
		
		enumTest(OverTimeValues.A);
		enumTest(OverTimeValues.B);
		enumTest(OverTimeValues.C);
		
		enumTest(OverTimeValues.A);
		enumTest(OverTimeValues.B);
		enumTest(OverTimeValues.C);
		
        System.out.println("compareTo() : " + OverTimeValues.A.compareTo(OverTimeValues.B));
		System.out.println("compareTo() : " + OverTimeValues.B.compareTo(OverTimeValues.A));
		
        //enum 값들을 array로 리턴
		for( OverTimeValues v : OverTimeValues.values() ) {
			System.out.println("values() : " + v);
		}
		
	}
	private static void enumTest(OverTimeValues time) {
		
		
		switch (time) {
		
		case A:
			System.out.println("AAAA :"  + time.getAmount() );
			break;
		case B:
			System.out.println("BBBB :"  + time.getAmount() );
			break;
		case C:
			System.out.println("CCCC :"  + time.getAmount() );
			break;
		
		}
		
	}

 

 

결과 :
Ctor called : 1000
Ctor called : 2000
Ctor called : 3000
AAAA :1000
BBBB :2000
CCCC :3000
AAAA :1000
BBBB :2000
CCCC :3000
AAAA :1000
BBBB :2000
CCCC :3000

compareTo() : -1
compareTo() : 1
values() : A
values() : B
values() : C

 

 

출처 : 자바의 신

'java' 카테고리의 다른 글

Throwable 및 stack trace의 이해  (0) 2019.09.15
try-catch finally  (0) 2019.09.15
interface와 abstract 차이  (0) 2019.09.14
final class, final method, final variable  (0) 2019.09.14
Object class  (0) 2019.09.14
Posted by easy16
java2019. 9. 14. 12:26

interface와 abstract 차이


interface 
1, 구현부가 없다.
2, implements를 사용

abstract 
1, 구현을 가질 수 있다.
2, extends를 사용
3, 명세 시, 메소드 앞에 abstract를 붙여야 한다.

공통: JAVA8 이후로는 interface나 abstract 모두 클래스 메소드(static) 를 포함할 수 있게 되었다.

 

public interface MemberManager {
	public boolean addMember( MemberDTO member);
	public boolean removeMemeber( MemberDTO member);
	public boolean updateMember( MemberDTO member);	
}


public class MemberManagerImpl implements MemberManager // Naming 관련 주목해서 볼 것.



public abstract class MemberManagerAbstract {
	
	
	public abstract boolean addMember( MemberDTO member);
	public abstract boolean removeMemeber( MemberDTO member);
	public abstract boolean updateMember( MemberDTO member);
	
	
	public void printLog() {
		System.out.println(getClass().getName());
	}
	

}

 

 

출처 : 자바의 신

'java' 카테고리의 다른 글

try-catch finally  (0) 2019.09.15
enum class 활용법  (0) 2019.09.14
final class, final method, final variable  (0) 2019.09.14
Object class  (0) 2019.09.14
deprecated 된 모듈 빌드 시.  (0) 2019.09.13
Posted by easy16
java2019. 9. 14. 12:19

 



final class, final method, final variable

-> 내용 변경 허용하지 않겠다.

final class      : 해당 클래스는 상속이 되지 않는다.
final method  : 해당 메소드는 오버라이드(Override) 불가. 
fianl variable  : 값을 변경하지 않는 변수,( 참조형 변수의 경우, 내부 맴버의 final 선언은 각각 지정해야한다.)

ex)

public class TestApplication {
	
	
	
	private static final int CONST_VAL=1;//클래스 변수이거나 인스턴스 변수일 경우, 생성과 동시에 초기화.
	public static void main(String [] args) {
			
		TestApplication test = new TestApplication();
		
		{
			final int abc;	
			abc=1;//(O) 지역 변수일 경우 오직 한번 assign 가능.
			abc=2;//(X)
			
		
		}
		
		
		
	}
	
}

 

 

 

출처 : 자바의 신

'java' 카테고리의 다른 글

enum class 활용법  (0) 2019.09.14
interface와 abstract 차이  (0) 2019.09.14
Object class  (0) 2019.09.14
deprecated 된 모듈 빌드 시.  (0) 2019.09.13
다형성 주의 사항 ( 부모자식의 접근제어자가 다를 때 발생하는 상황)  (0) 2019.09.13
Posted by easy16
java2019. 9. 14. 10:54

 

 

 

toString()

-> getClass().getName() + '@' + Integer.toHexString(hashCode());

 

 

hashCode : 16진수로 표현되는 객체 주소값을 리턴

 

출처 : 자바의 신

Posted by easy16
java2019. 9. 13. 20:41

-Xlint:deprecation 옵션이 붙으면 자세한 warnning message를 볼 수 있다.

되도록 deprecated 된 모듈은 대체되는 것들로 교체한다.


C:\Users\Lee>javac com/api/APICheck.java
Note: com\api\APICheck.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

C:\Users\Lee>javac  -Xlint:deprecation com/api/APICheck.java
com\api\APICheck.java:14: warning: [deprecation] String(byte[],int) in String has been deprecated
                String convertedStr = new String(strBytes, 0);

 

1 warning

 

출처: 자바의 신

Posted by easy16