Programming/Java2014. 3. 12. 19:59
자바는 바이트 코드로 컴파일 된 후, 인터프리터로 실행되는데
컴파일된 class 파일을 덤프하는 자바 디 컴파일러가 javap로 기본 내장되어있다.
물론 출력이 오리지널 java 파일로 나오는건 아니니 디버깅 용도의 덤프수준..

C:\Program Files\Java\jdk1.7.0_51\bin>javap
Usage: javap <options> <classes>
where possible options include:
  -help  --help  -?        Print this usage message
  -version                 Version information
  -v  -verbose             Print additional information
  -l                       Print line number and local variable tables
  -public                  Show only public classes and members
  -protected               Show protected/public classes and members
  -package                 Show package/protected/public classes
                           and members (default)
  -p  -private             Show all classes and members
  -c                       Disassemble the code
  -s                       Print internal type signatures
  -sysinfo                 Show system info (path, size, date, MD5 hash)
                           of class being processed
  -constants               Show static final constants
  -classpath <path>        Specify where to find user class files
  -bootclasspath <path>    Override location of bootstrap class files 

[링크 : http://flowonweb.com/post/29756735269/java-bytecode]
[링크 : http://skyul.tistory.com/334]

'Programming > Java' 카테고리의 다른 글

Java array  (0) 2014.03.13
java string.intern()  (0) 2014.03.12
java static initialize  (0) 2014.03.12
java 1.5 이후 추가 for-each / varargs(autoboxing)  (0) 2014.03.11
JUnit 사용 예  (0) 2014.03.11
Posted by 구차니
Programming/Java2014. 3. 12. 18:18
정적 초기화 / static initalize는 
static member variable에 대한 초기화를 수행하는 루틴이다.

static 변수들의 경우 해당 클래스가 인스턴스화 되어 메모리에 올려지지 않더라도(힙에 할당)
스택에서 바로 실행이 되어야 하는 부분이므로
main문이 실행되기 전에 클래스 초기화를 하며 static에 상주하게 되며
static initialize block을 통해 조금은 더 복잡한 구문을 지원하게 된다. (try-catch등의 복잡한)

어떻게 보면.. 일종의 static 변수들에 대한 constructor 라고 볼 수 있으려나?

public class StaticTest4 {
static
{
System.out.println("Statis init1");
}

static String s = echo("string");
static
{
System.out.println("Statis init2");
}

static String echo(String s)
{
System.out.println(s);
return s;
}

public static void main(String[] args)
{
// TODO Auto-generated method stub
System.out.println("main");
StaticTest4 st4 = new StaticTest4();
}

}
 

결과는 main 문에 들어가기 전에 static 에 대한 초기화를 먼저 수행함을 볼 수 있다.
Static init1
string
Static init2
main 

[링크 : http://raoo.tistory.com/54]
[링크 : http://cafe.naver.com/hanbitria/15]

 This works well when the initialization value is available and the initialization can be put on one line. However, this form of initialization has limitations because of its simplicity. If initialization requires some logic (for example, error handling or a for loop to fill a complex array), simple assignment is inadequate. Instance variables can be initialized in constructors, where error handling or other logic can be used. To provide the same capability for class variables, the Java programming language includes static initialization blocks.
[링크 : http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html


'Programming > Java' 카테고리의 다른 글

java string.intern()  (0) 2014.03.12
java bytecode decompiler - javap  (0) 2014.03.12
java 1.5 이후 추가 for-each / varargs(autoboxing)  (0) 2014.03.11
JUnit 사용 예  (0) 2014.03.11
java class default access modifier  (0) 2014.03.11
Posted by 구차니
Programming/C++ STL2014. 3. 12. 17:28
cpp에서 제공하는 디폴트 매개변수는 가변인자와 묘하게 섞여있는 느낌이다.

void test(int a = 1, int b = 2, int c = 3);

test();
test(1);
test(1,2);
test(1,2,3); 

인자 갯수보다 적게 입력이 가능하면서
생략된 인자에 대해서는 기본값으로 초기화를 수행한다.

[링크 : http://printf.egloos.com/1770599]

'Programming > C++ STL' 카테고리의 다른 글

cpp class에서 변수값을 미리 선언 못하는 이유  (0) 2014.03.15
cpp 와 java의 차이점(문법)  (0) 2014.03.14
c -> cpp 추가사항  (0) 2014.03.10
오버로딩 / 오버라이딩  (0) 2014.03.10
try - throw - catch  (0) 2014.03.05
Posted by 구차니
Programming/Java2014. 3. 11. 20:32
배열은 기존의 for(초기화;조건문;증감문) 식이 아닌
for(변수형:변수 리스트) 식으로 for-each를 통해 간편하게 구현을 할 수 있게 되어 있다.
public void argTest(String... n)
{
//for (int i = 0; i < n.length; i++)
// System.out.println("n[" + i + "]:" + n[i]);
for(String i: n)
System.out.println(i);

System.out.println("-------------------------------");
}

그리고 c에서는 인자를 ... 를 통해서 가변인자를 지원하나
Java는 1.5 부터(JDK 5) varargs를 지원하게 되었다

단, java에서는 ... 내에서는 동일 형에 대해서 만 지원한다.
public void argTest(String... n)

vt.argTest("Varargs", "Test");
vt.argTest("100", "600", "900", "1000");
vt.argTest();

C언어 스타일로 사용하려면 하나의 변수를 고정하고 그 이후에 대해서 ... 처리 하면 되지만
public void argTest(int s, String... n)

vt.argTest(1);
vt.argTest(1,"100");

C언어처럼 ... 이후에는 다른 변수를 추가할 수는 없다.(즉, 다른 형에 대해서는 연속적으로 입력 불가능)
public void argTest(int s, String... n, double e)
Error : The variable argument type String of the method argTest must be the last parameter 

for-each나 ...(varargs)는 autoboxing을 통해 구현되는 것으로 보인다.

[링크 : http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html] for
[링크 : http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html] for - each
[링크 : http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html]
    [링크 : http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html]
    [링크 : http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html]

'Programming > Java' 카테고리의 다른 글

java bytecode decompiler - javap  (0) 2014.03.12
java static initialize  (0) 2014.03.12
JUnit 사용 예  (0) 2014.03.11
java class default access modifier  (0) 2014.03.11
*.java 파일 하나에 여러개의 class 생성  (0) 2014.03.11
Posted by 구차니
Programming/Java2014. 3. 11. 18:00
New - JUnit Test Case로 Junit 생성


귀찮으니.. 걍 기본 값으로 설정


클래스내의 테스트할 메소드를 선택


처음 생성해서인지 JUnit build path 추가 해야 한다고 알려주니 OK


Test.java와 JUnit 4가 추가 된 Package Explorer의 모습


자동 생성된 Junit용 MP3pTest.java 파일
import static org.junit.Assert.*;
import org.junit.Test;

public class MP3pTest {

@Test
public void testMemoryUp()
{
fail("Not yet implemented");
}

@Test
public void testSetColor()
{
fail("Not yet implemented");
}
} 

이후에는 테스트용 내용을 채워 넣으면 간단하게 끝인... 듯?
난 안착하니까 걍 실행해보니 Failuer 2건 ㅋㅋㅋ


[링크 : http://computtee.tistory.com/65]

Posted by 구차니
Programming/Java2014. 3. 11. 17:07
java에서 class 에 접근제한을 하지 않고 (ex. public class) 생성시에는
동일 패키지에 대해서만 접근이 가능하도록 생성이 된다.

[링크 : http://stackoverflow.com/questions/16164902/what-is-the-default-access-modifier-in-java]

 A class may be declared with the modifier public, in which case that class is visible to all classes everywhere. If a class has no modifier (the default, also known as package-private), it is visible only within its own package (packages are named groups of related classes — you will learn about them in a later lesson.)
 

[링크 : http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html


public > protected > default > private
public - 전부 허용
protected - 동일 패키지, 상속관계시 허용
default - 동일 패키지, 전부 허용
private - 현재 class / object만 허용

'Programming > Java' 카테고리의 다른 글

java 1.5 이후 추가 for-each / varargs(autoboxing)  (0) 2014.03.11
JUnit 사용 예  (0) 2014.03.11
*.java 파일 하나에 여러개의 class 생성  (0) 2014.03.11
java 명령어 줄 인수  (0) 2014.03.10
java break / continue  (0) 2014.03.10
Posted by 구차니
Programming/Java2014. 3. 11. 17:01
하나의 파일에 여러개의 class를 추가할수 있으나
파일명과 동일한 클래스는 반드시 public 이어야 한다.
그리고 동일 파일내에 다른 클래스들 역시 독립된 *.class 파일로 생성된다.

[링크 : https://kldp.org/node/69225]
[링크 : http://k.daum.net/qna/view.html?qid=3fqBg]

'Programming > Java' 카테고리의 다른 글

JUnit 사용 예  (0) 2014.03.11
java class default access modifier  (0) 2014.03.11
java 명령어 줄 인수  (0) 2014.03.10
java break / continue  (0) 2014.03.10
java와 cpp의 차이점 - 연산자 오버로딩 / 다중상속  (0) 2014.03.10
Posted by 구차니
Programming/C Win32 MFC2014. 3. 11. 16:30
gcc의 확장 기능으로
형의 종류를 알려준다고 하는데.. c++용인지 c용인지 모르겠다 -_-

[링크 : http://stackoverflow.com/questions/12081502/typeof-operator-in-c]
[링크 : http://codecat.tistory.com/entry/GCC-typeof]

If you are writing a header file that must work when included in ISO C programs, write __typeof__ instead of typeof.

[링크 : http://gcc.gnu.org/onlinedocs/gcc/Typeof.html
[링크 : http://en.wikipedia.org/wiki/Typeof]
[링크 : http://en.wikipedia.org/wiki/Typeid]

'Programming > C Win32 MFC' 카테고리의 다른 글

순열생성관련  (0) 2014.06.27
2중 포인터 사용이유  (0) 2014.03.19
const / pointer  (0) 2014.02.25
assert()  (0) 2013.12.18
printf의 %s와 %S  (0) 2013.06.15
Posted by 구차니
Programming/Java2014. 3. 10. 17:09
java는 파일명이 클래스명과 동일해야 하므로
c와 같이 인자 0번이 실행된 파일의 이름이 아니라 첫번째 인자가 들어온다.

public class test {

public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(args.length);
for(int i = 0; i < args.length;i++)
System.out.println(args[i]);
}
}

일반적으로 많이 쓰일 문자열 인자를 숫자로 바꾸어주는 parse 관련 클래스/메소드들
Char 클래스는 존재하지 않나? 
Double.parseDouble();
Float.parseFloat();
Boolean.parseBoolean();
Byte.parseByte();
Short.parseShort();
Integer.parseInt(s);
Long.parseLong(); 

[링크 : http://docs.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html]
Posted by 구차니
Programming/Java2014. 3. 10. 16:32
java에서는 goto가 없지만 break와 continue에 label을 지원한다.
[링크 : http://stackoverflow.com/questions/2545103/is-there-a-goto-statement-in-java]

 The break statement terminates the labeled statement; it does not transfer the flow of control to the label. Control flow is transferred to the statement immediately following the labeled (terminated) statement.

[링크 : http://stackoverflow.com/questions/14960419/is-using-a-labeled-break-a-good-practice-in-java

단, 반복문과 라벨 사이에는 어떠한 문장도 들어가서는 안되며 무언가가 삽입되었을 시에는
"The label -label name- is missing"이라는 에러가 발생된다.


[링크 : http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html]
Posted by 구차니