Ubuntu 환경에서 소프트웨어를 설치하다보면 종종 JDK를 요구하곤 한다.

예전에는 리눅스 패키지에 JDK가 포함되어 배포되어서 업데이트도 쉽고 다루기도 쉬웠는데,
라이선스의 이슈때문인지 최근에는 기본으로 포함되어있지는 않다.

물론 많은 수요가 있으니 편한 공급 방법을 제공해주고 있다.


하지만 여기에서는
그냥 정공법으로 공식 배포사이트에서 다운로드를 받아서 설치를 하는 과정을 살펴볼 것이다.


1. Download

     - 오라클의 JDK 공식 배포 사이트를 통해 다운로드 주소를 확인하자.
     - http://www.oracle.com/technetwork/java/javase/downloads/index.html

 


     - 물론 대부분의 상황은 JRE 만으로도 충분하지만, 개발자 마인드를 버리지못한 죄로... 무조건 JDK !!!
     - DOWNLOAD 버튼을 누르자.


     - Accept 해주고 OS에 맞는 다운로드 링크를 통해 저장하자.
     - 소프트웨어에 따라 요구하는 특정 버전의 JDK가 있다. 이 부분은 주의하자.


2. Install

     - JDK 버전에 따라 설치 방법이 살짝 다르다.
     - 여기에서는 가장 최신 버전을 기준으로 설명하겠다.


$ sudo -s tar zxvf jdk-7u5-linux-i586.tar.gz

     - 예전에는 위의 다운로드 링크 주소로 wget 을 통해 다운로드 할 수 있었는데, 요즘엔 안된다.
     - 예전에는 *.tar.gz 가 아니라 *.bin 파일로 다운로드가 되었었다.


$ sudo mkdir -p /usr/local/java
$ sudo -s mv ./jdk1.7.0_05 /usr/local/java/

     - 이전의 *.bin 방식은 그냥 파일에 실행 속성만 주고 실행하면 끝났는데... 이번에는 영~ 귀찮다.



$ sudo nano /etc/environment


PATH=...........:/usr/local/java/jdk1.7.0_05/bin
JAVA_HOME=/usr/local/java/jdk1.7.0_05

 

$ source /etc/environment


     - 환경 설정 (경로) 잡아주고,
     - alternative 관련 설정도 잡아주자.


$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.7.0_05/bin/java" 1
$ sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.7.0_05/bin/javac" 1
$ sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.7.0_05/bin/javaws" 1

$ sudo update-alternatives --set java /usr/local/java/jdk1.7.0_05/bin/java
$ sudo update-alternatives --set javac /usr/local/java/jdk1.7.0_05/bin/javac
$ sudo update-alternatives --set javaws /usr/local/java/jdk1.7.0_05/bin/javaws


     - 이렇게 하고 마지막으로 잘 되었는지 확인을 위해서 아래와 같이 버전을 확인해보자.

$ java -version



여기까지~

반응형
Question 21 : 추상클래스

Given:
11. public abstract class Shape {
12.     int x;
13.     int y;
14.     public abstract void draw();
15.     public void setAnchor(int x, int y) {
16.         this.x = x;
17.         this.y = y;
18.     }
19. }

and a class Circle that extends and fully implements the Shape class.
Which is correct?

A. Shape s = new Shape();
    s.setAnchor(10,10);
    s.draw();
B. Circle c = new Shape();
    c.setAnchor(10,10);
    c.draw();
C. Shape s = new Circle();
    s.setAnchor(10,10);
    s.draw();
D. Shape s = new Circle();
    s->setAnchor(10,10);
    s->draw();
E. Circle c = new Circle();
    c.Shape.setAnchor(10,10);
    c.Shape.draw();


[HeadFirst Java - p.234]
어떤 클래스의 인스턴스를 만들 수 없게 하는 간단한 방법이 있습니다. 즉 특정 유형에 대해 "new" 키워드를 쓸 수 없게 하는 방법입니다. 클래스를 abstract로 지정하면 컴파일러에서 그 유형의 인스턴스를 만드는 코드를 허용하지 않습니다. 하지만 그 추상 유형(abstract type)을 레퍼런스로 사용할 수 있습니다. 사실 그렇게 레퍼런스로 사용하는 것이 바로 이런 추상 클래스를 만드는 핵심적인 이유 중의 하나라고 볼 수 있습니다.


Answer: C
반응형

'잘난놈되기 > SCJP' 카테고리의 다른 글

Q020. 내부 무명 클래스  (0) 2008.04.30
Q019. 클래스의 형변환  (0) 2008.04.13
Q018. 인터페이스  (0) 2008.04.13
Q017. import static  (0) 2008.04.11
Q016. 내부클래스  (0) 2008.04.04

Question 20 : 내부 무명 클래스

Given:
1. interface TestA { String toString(); }
2. public class Test {
3.     public static void main(String[] args) {
4.         System.out.println(new TestA() {
5.             public String toString() { return “test”; }
6.         });
7.     }
8. }

What is the result?

A. test
B. null
C. An exception is thrown at runtime.
D. Compilation fails because of an error in line 1.
E. Compilation fails because of an error in line 4.
F. Compilation fails because of an error in line 5.


Answer : A
반응형

'잘난놈되기 > SCJP' 카테고리의 다른 글

Q021. 추상클래스  (1) 2008.05.03
Q019. 클래스의 형변환  (0) 2008.04.13
Q018. 인터페이스  (0) 2008.04.13
Q017. import static  (0) 2008.04.11
Q016. 내부클래스  (0) 2008.04.04
Question 19 : 클래스의 형변환

Given:
1. class TestA {
2.      public void start() { System.out.println(”TestA”); }
3. }
4. public class TestB extends TestA {
5.      public void start() { System.out.println(”TestB”); }
6.      public static void main(String[] args) {
7.           ((TestA)new TestB()).start();
8.      }
9. }

What is the result?

A. TestA
B. TestB
C. Compilation fails.
D. An exception is thrown at runtime.


Answer: B
반응형

'잘난놈되기 > SCJP' 카테고리의 다른 글

Q021. 추상클래스  (1) 2008.05.03
Q020. 내부 무명 클래스  (0) 2008.04.30
Q018. 인터페이스  (0) 2008.04.13
Q017. import static  (0) 2008.04.11
Q016. 내부클래스  (0) 2008.04.04
Question 18  : 인터페이스

Given:
1. public interface A {
2.      String DEFAULT_GREETING = “Hello World”;
3.      public void method1();
4. }

A programmer wants to create an interface called B that has A as its parent. Which interface declaration is correct?

A. public interface B extends A { }
B. public interface B implements A { }
C. public interface B instanceOf A { }
D. public interface B inheritsFrom A { }


[HeadFirst Java - p.258]
# 인터페이스 정의
     public interface Pet {...}
# 인터페이스 구현
     public class Dog extends Canine implements Pet {...}


//A를 부모로 하여 B라는 인터페이스를 만들려고 한다. 인터페이스의 정의가 올바른 것은?
Answer: A
반응형

'잘난놈되기 > SCJP' 카테고리의 다른 글

Q020. 내부 무명 클래스  (0) 2008.04.30
Q019. 클래스의 형변환  (0) 2008.04.13
Q017. import static  (0) 2008.04.11
Q016. 내부클래스  (0) 2008.04.04
Q015. 무명클래스의 형태  (0) 2008.04.04
Question 17 : import static

Given:
1. package sun.scjp;
2. public enum Color { RED, GREEN, BLUE }

1. package sun.beta;
2. // insert code here
3. public class Beta {
4.      Color g = GREEN;
5.      public static void main( String[] argv)
6.      { System.o ut.println( GREEN); }
7. }

The class Beta and the enum Color are in different packages.

Which two code fragments, inserted individually at line 2 of the Beta declaration, will allow this code to compile? (Choose two.)

A. import sun.scjp.Color.*;
B. import static sun.scjp.Color.*;
C. import sun.scjp.Color; import static sun.scjp.Color.*;
D. import sun.scjp.*; import static sun.scjp.Color.*;
E. import sun.scjp.Color; import static sun.scjp.Color.GREEN;

[HeadFirst Java - p.261]
# 패키지가 원래 이름 충돌을 방지하기 위한 용도로 만들어진 것은 아니지만, 이름 충돌을 방지하는 것도 패키지의 핵심적인 기능 가운데 하나라고 할 수 있습니다.
# 클래스를 package에 집어넣는 방법
     1. 패키지 명을 결정합니다.
          - "com.headfirstjava"를 예로 들면, 클래스 명이 'PackageExercise'라면
          - 전체이름은 "com.headfirstjava.PackageExercise"
     2. 클래스에 package 선언문을 집어넣습니다.
          - 소스코드 파일의 첫번째 선언문이어야 한다.
          - 소스 파일 하나에 들어있는 클래스는 모두 같은 패키지에 들어있어야 한다.
          - package 선언문이 하나밖에 들어갈 수 없기 때문이다.
     3.디렉토리 구조를 패키지 구조에 맞게 설정
          - PackageExercise의 소스코드는
          - com이라는 디렉토리 밑에 있는 headfirstjava라는 디렉토리 밑에 위치

[HeadFirst Java - p.261]
# 정적 임포트를 사용한 코드
     import static java.lang.System.out;
     import static java.lang.Math.*;
     class WithStatic {
          public static void main(String [] args) {
               out.println("sqrt " + sqrt(2.0));
               out.println("tan " + tan(60));
          }
     }

Answer: CE
반응형

'잘난놈되기 > SCJP' 카테고리의 다른 글

Q019. 클래스의 형변환  (0) 2008.04.13
Q018. 인터페이스  (0) 2008.04.13
Q016. 내부클래스  (0) 2008.04.04
Q015. 무명클래스의 형태  (0) 2008.04.04
Q014. 열거형  (0) 2008.04.03
Question 16 : 내부클래스

Click the Exhibit button.
10. interface Foo {
11.      int bar();
12. }
13.
14. public class Beta {
15.
16.      class A implements Foo {
17.           public int bar() { return 1; }
18.      }
19.
20.      public int fubar( Foo foo) { return foo.bar(); }
21.
22.      public void testFoo() {
23.
24.           class A implements Foo {
25.                public int bar() { return 2; }
26.           }
27.
28.           System.out.println( fubar( new A()));
29.      }
30.
31.      public static void main( String[] argv) {
32.           new Beta().testFoo();
33.      }
34. }

Which three statements are true? (Choose three.)

A. Compilation fails.
B. The code compiles and the output is 2.
C. If lines 16, 17 and 18 were removed, compilation would fail.
D. If lines 24, 25 and 26 were removed, compilation would fail.
E. If lines 16, 17 and 18 were removed, the code would compile and the output would be 2.
F. If lines 24, 25 and 26 were removed, the code would compile and the output would be 1.


[HeadFirst Java - p.410]
# 내부클래스에서는 외부클래스의 모든 메소드와 변수를 사용할 수 있습니다. 심지어 private로 지정된 메소드와 클래스도 전부 쓸 수 있습니다. 내부클래스에서는 그런 외부클래스의 변수와 메소드도 모두 내부클래스 안에서 선언한 것처럼 사용하면 됩니다.
# 간단한 내부클래스 (내부클래스에서 외부클래스 변수를 사용하는 방법)
     class MyOuterClass {
          private int x;
          class MyInnerClass {
               void go() { x = 42; }
          }
     }


Answer: BEF
반응형

'잘난놈되기 > SCJP' 카테고리의 다른 글

Q018. 인터페이스  (0) 2008.04.13
Q017. import static  (0) 2008.04.11
Q015. 무명클래스의 형태  (0) 2008.04.04
Q014. 열거형  (0) 2008.04.03
Q013. import static  (0) 2008.04.03
Question 15 : 무명클래스의 형태

Given:
10. interface Foo { int bar(); }
11. public class Sprite {
12.      public int fubar( Foo foo) { return foo.bar(); }
13.      public void testFoo() {
14.           fubar(
15.                // insert code here
16.           );
17.      }
18. }

Which code, inserted at line 15, allows the class Sprite to compile?

A. Foo { public int bar() { return 1; } }
B. new Foo { public int bar() { return 1; } }
C. new Foo() { public int bar(){return 1; } }
D. new class Foo { public int bar() { return 1; } }


[Internet]
http://blog.naver.com/caoticc?Redirect=Log&logNo=140045230831
# 익명클래스/무명클래스 (anonymous class)
     - 클래스 또는 인터페이스에 대한 객체를 생성하면서 바로 클래스 또는 인터페이스(내용)를 정의하는 클래스
     - 다시말해서, new 수식이 있는 곳에서 바로 클래스 또는 인터페이스를 정의하는 것
# 무명클래스의 특징
     - 단순한 클래스 또는 인터페이스를 정의하여 사용할 때, 여러 곳에서 사용하는 것이 아니고 단 한 번만 정의하여 사용할 경우 주로 사용
     - 주로 클래스 또는 인터페이스를 구현하여 바로 사용하고자 할 때 이용
# 주의할 점은, 무명클래스는 new 수식의 연장이므로 끝에 꼭 세미콜론(;)을 붙여주어야 한다.
# 예제
     class AnonymousClass {
          public void print() { System.out.print("클래스1"); }
     }
     public class AnonymousExample {
          public static void methodA (AnonymousClass obj) { obj.print(); }
     }
     public static void main(String[] args) {
          methodA (
               new AnonymousClass() {
                    public void print() { System.out.print("클래스2"); }
               });
          }
     }
# 결과 출력
     - 클래스2


Answer: C
반응형

'잘난놈되기 > SCJP' 카테고리의 다른 글

Q017. import static  (0) 2008.04.11
Q016. 내부클래스  (0) 2008.04.04
Q014. 열거형  (0) 2008.04.03
Q013. import static  (0) 2008.04.03
Q012. 변수의 적용 범위  (0) 2008.04.01

+ Recent posts