수색…


비고

자바 프로그래밍 언어는 ...

  • 범용 : 다양한 응용 프로그램 도메인에서 소프트웨어를 작성하는 데 사용하도록 설계되었으며 특정 도메인에 대한 특수 기능이 부족합니다.

  • 클래스 기반 : 클래스 의 객체 구조가 정의됩니다. 클래스 인스턴스는 항상 클래스 정의에 지정된 필드와 메소드를 갖습니다 ( 클래스 및 객체 참조). 이것은 JavaScript와 같은 비 클래스 기반 언어와는 대조적입니다.

  • 정적 형식 : 컴파일러는 변수 유형이 존중된다는 것을 컴파일 타임에 확인합니다. 예를 들어, 메소드가 String 유형의 인수를 예상하면 메소드가 호출 될 때 해당 인수는 실제로 문자열이어야합니다.

  • 객체 지향 : Java 프로그램의 대부분은 클래스 인스턴스, 즉 상태 (필드) 및 동작 (데이터에서 작동하고 객체 인터페이스 를 외부 세계와 형성하는 메소드)의 번들입니다.

  • Portable : javac 를 사용하여 모든 플랫폼에서 컴파일 할 수 있으며 결과 클래스 파일은 JVM이있는 모든 플랫폼에서 실행할 수 있습니다.

Java는 응용 프로그램 개발자가 "WORA (Write Once, Run Anywhere)"를 허용하기위한 것이며, 다시 컴파일 할 필요없이 Java를 지원하는 모든 플랫폼에서 컴파일 된 Java 코드를 실행할 수 있습니다.

자바 코드는 Java 가상 머신 (JVM)에 의해 해석되는 바이트 코드 ( .class 파일)로 컴파일됩니다. 이론 상으로는 하나의 자바 컴파일러에 의해 생성 된 바이트 코드는 다른 종류의 컴퓨터에서도 모든 JVM에서 같은 방식으로 실행되어야합니다. JVM은 자주 실행되는 바이트 코드 부분을 네이티브 머신 명령으로 컴파일하도록 선택할 수 있습니다 (실제 프로그램에서). 이를 "JIT (Just-In-Time) 컴파일"이라고합니다.

Java Edition 및 버전

Sun / Oracle이 정의한 Java의 세 가지 버전이 있습니다.

  • Java Standard Edition (SE) 은 일반적으로 사용하도록 설계된 에디션입니다.
  • Java Enterprise Edition (EE) 은 Java에서 "엔터프라이즈 급"서비스를 구축 할 수있는 다양한 기능을 추가합니다. Java EE는 별도로 다룹니다.
  • Java Micro Edition (ME)Java SE 의 하위 집합을 기반으로하며 한정된 자원을 사용하는 소형 장치에 사용하기위한 것입니다.

Java SE / EE / ME 버전 에는 별도의 주제가 있습니다.

각 판에는 여러 버전이 있습니다. Java SE 버전은 다음과 같습니다.

Java 설치

Java (Standard Edition) 설치 에 대한 별도의 주제가 있습니다.

Java 프로그램 컴파일 및 실행

별도 주제가 있습니다 :

무엇 향후 계획?

다음은 자바 프로그래밍 언어를 계속 배우고 이해할 수있는 주제에 대한 링크입니다. 이 과목들은 당신을 시작하게하는 Java 프로그래밍의 기초입니다.

테스트

Java는 표준 라이브러리 테스트를 지원하지 않지만 테스트를 지원하도록 설계된 타사 라이브러리가 있습니다. 가장 보편적 인 두 가지 단위 테스트 라이브러리는 다음과 같습니다.

다른

  • 자바를위한 디자인 패턴에 적용되는 디자인 패턴 .
  • 안드로이드 프로그래밍에 덮여 안드로이드 .
  • Java Enterprise Edition 기술은 Java EE 에서 다룹니다.
  • Oracle JavaFX 기술은 JavaFX 에서 다룹니다.

1. 버전 섹션에서 수명 종료 (무료) 날짜는 Oracle이 Java SE의 업데이트를 공용 다운로드 사이트에 게시하는 것을 중지 할 때입니다. Java SE의 일반적인 유지 보수는 물론 중요한 버그 수정 및 보안 수정에 대한 지속적인 액세스가 필요한 고객은 Oracle Java SE 지원을 통해 장기간 지원을받을 수 있습니다.

버전

Java SE 버전 코드 네임 수명 종료 (무료 1 ) 출시일
Java SE 9 (Early Access) 없음 미래 2017-07-27
Java SE 8 거미 미래 2014-03-18
Java SE 7 돌고래 2015-04-14 2011 년 7 월 28 일
Java SE 6 머스탱 2013-04-16 2006-12-23
Java SE 5 호랑이 2009-11-04 2004-10-04
Java SE 1.4 멀린 2009-11-04 이전 2002-02-06
Java SE 1.3 황조롱이 2009-11-04 이전 2000-05-08
Java SE 1.2 운동장 2009-11-04 이전 1998-12-08
Java SE 1.1 없음 2009-11-04 이전 1997-02-19
Java SE 1.0 참나무 2009-11-04 이전 1996-01-21

첫 번째 자바 프로그램 만들기

HelloWorld.java 라는 이름의 텍스트 편집기 또는 IDE 에서 새 파일을 만듭니다. 그런 다음이 코드 블록을 파일에 붙여 저장하십시오.

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

Ideone에서 실시간으로 실행

주 : Java가 이것을 public class 로 인식하고 컴파일 타임 오류를 발생 시키지 않으려면 파일 이름이 확장자가 .java 클래스 이름 (이 예에서는 HelloWorld )과 동일해야합니다. 그 전에 public 액세스 한정자가 있어야합니다.

이름 지정 규칙 은 Java 클래스가 대문자로 시작하고 각 단어의 첫 글자가 대문자로 된 낙타의 형식으로되어있는 것이 좋습니다. 규칙은 밑줄 ( _ ) 및 달러 기호 ( $ )에 대해 권장합니다.

컴파일하려면 터미널 창을 열고 HelloWorld.java 디렉토리로 이동하십시오.

cd /path/to/containing/folder/

주 : cd 는 디렉토리를 변경하기위한 터미널 명령입니다.

다음과 같이 javac 다음에 파일 이름과 확장자를 입력하십시오.

$ javac HelloWorld.java

'javac' is not recognized as an internal or external command, operable program or batch file. 오류 'javac' is not recognized as an internal or external command, operable program or batch file. 경우가 일반적 'javac' is not recognized as an internal or external command, operable program or batch file. JDK 설치하고 IDE 에서 프로그램을 실행할 수도 있습니다. eclipse 등. 경로는 기본적으로 환경에 추가되지 않으므로.

Windows에서이 문제가 발생하는 경우 해결하려면 먼저 javac.exe 경로를 찾아보십시오 C:\Program Files\Java\jdk(version number)\bin 있을 가능성이 큽니다. 그런 다음 아래에서 실행 해보십시오.

$ C:\Program Files\Java\jdk(version number)\bin\javac HelloWorld.java

이전에 javac 을 호출 할 때 위의 명령과 동일했습니다. 이 경우에만 OSjavac 위치를 알고 있습니다. 이제는 전체 경로를 매번 입력 할 필요가 없습니다. 이것을 PATH 에 추가해야합니다.

Windows XP / Vista / 7 / 8 / 10에서 PATH 환경 변수를 편집하려면 다음과 같이하십시오.

  • 제어판 ⇒ 시스템 ⇒ 고급 시스템 설정
  • "고급"탭으로 전환 ⇒ 환경 변수
  • "시스템 변수"에서 아래로 스크롤하여 "PATH"를 선택하십시오. ⇒ 편집

이 작업을 실행 취소 할 수 없으므로 조심하십시오. 먼저 기존 경로를 메모장에 복사하십시오. 그런 다음에 정확한 경로 얻기 위해 javac 폴더를 수동으로 검색 javac 있는 주소 표시 줄을 클릭 한 다음 복사합니다. c:\Program Files\Java\jdk1.8.0_xx\bin 과 유사해야합니다 c:\Program Files\Java\jdk1.8.0_xx\bin

"Variable value"필드에 모든 기존 디렉토리의 IN FRONT 뒤에 세미콜론 (;)을 붙여 넣습니다. 기존 항목을 삭제 하지 마십시오 .

Variable name  : PATH
Variable value : c:\Program Files\Java\jdk1.8.0_xx\bin;[Existing Entries...]

이제이 문제가 해결되어야합니다.

Linux 기반 시스템의 경우 여기에서 시도하십시오 .

주 : javac 명령은 Java 컴파일러를 호출합니다.

컴파일러는 JVM (Java Virtual Machine) 에서 실행될 수있는 HelloWorld.class 라는 바이트 코드 파일을 생성합니다. Java 프로그래밍 언어 컴파일러 인 javac 은 Java 프로그래밍 언어로 작성된 소스 파일을 읽고이를 bytecode 클래스 파일로 컴파일합니다. 선택적으로 컴파일러는 Pluggable Annotation Processing API를 사용하여 소스 및 클래스 파일에있는 주석을 처리 할 수도 있습니다. 컴파일러는 명령 행 도구이지만 Java 컴파일러 API를 사용하여 호출 할 수도 있습니다.

프로그램을 실행하려면 java 뒤에 main 메소드가 들어있는 클래스의 이름을 입력하십시오 (예제에서는 HelloWorld ). .class 가 생략 된 방법에 유의하십시오.

$ java HelloWorld

주 : java 명령은 Java 응용 프로그램을 실행합니다.

그러면 콘솔로 출력됩니다 :

안녕, 세상!

첫 번째 Java 프로그램을 성공적으로 코딩하고 빌드했습니다!

참고 : Java 명령 ( java , javac 등)을 인식하려면 다음을 확인해야합니다.

JVM에서 제공하는 컴파일러 ( javac )와 executor ( java )를 사용해야합니다. 설치 한 버전을 확인하려면 명령 행에서 java -versionjavac -version 을 입력하십시오. 프로그램의 버전 번호가 터미널에 인쇄됩니다 (예 : 1.8.0_73 ).


Hello World 프로그램을 자세히 살펴 봅니다.

"Hello World"프로그램에는 HelloWorld 클래스 정의, main 메소드 및 main 메소드 내부의 명령문으로 구성된 단일 파일이 들어 있습니다.

public class HelloWorld {

class 키워드는 HelloWorld 클래스의 클래스 정의를 시작합니다. 모든 Java 응용 프로그램에는 최소한 하나의 클래스 정의가 있습니다 (클래스에 대한 추가 정보 ).

    public static void main(String[] args)  {

이것은 JVM 이 프로그램을 실행할 수있는 진입 점 메소드 (이름과 public static void main(String[]) 서명으로 정의 public static void main(String[]) )입니다. 모든 Java 프로그램에는 하나가 있어야합니다. 그것은:

  • public : 메소드가 프로그램 밖에서도 어디에서나 호출 될 수 있음을 의미합니다. 자세한 내용은 공개 설정 을 참조하십시오.
  • static : 존재한다는 것을 의미하며 객체를 만들지 않고 클래스 수준에서 자체적으로 실행할 수 있습니다.
  • void : 아무런 값도 반환하지 않는다는 것을 의미합니다. 참고 : 이것은 int 와 같은 리턴 코드가 예상되는 C 및 C ++과 다릅니다 (Java의 방식은 System.exit() 임).

이 기본 메소드는 다음을 허용합니다.

  • 주 함수 (예 : 명령 줄 인수 )에 인수로 전달 된 String배열 (일반적으로 args 라고 함)입니다.

거의 모든 것은 Java 진입 점 방법에 필요합니다.

불필요한 부분 :

  • args 라는 이름은 변수 이름이므로 일반적으로 args 라고 불리지 만 원하는 모든 이름을 사용할 수 있습니다.
  • 배열이 varargs로 전달 될 수 있기 때문에 매개 변수 유형이 배열 ( String[] args )인지 Varargs ( String... args )인지는 중요하지 않습니다.

주 : 단일 응용 프로그램에는 진입 점 ( main ) 메소드를 포함하는 여러 클래스가있을 수 있습니다. 응용 프로그램의 진입 점은 java 명령에 대한 인수로 전달 된 클래스 이름에 의해 결정됩니다.

main 메소드 안에는 다음과 같은 문장이있다.

        System.out.println("Hello, World!");

이 문장을 요소별로 나누어 보겠습니다.

요소 목적
System 이는 후속 표현식이 java.lang 패키지의 System 클래스를 호출 함을 나타냅니다.
. 이것은 "점 연산자"입니다. 도트 연산자는 클래스 멤버 1에 대한 액세스를 제공합니다. 즉 그 필드 (변수)와 그 방법. 이 경우,이 도트 연산자를 사용하면 참조 할 수 있습니다 out 내에서 정적 필드를 System 클래스입니다.
out 이것은 표준 출력 기능을 포함하는 System 클래스 내의 PrintStream 유형의 정적 필드 이름입니다.
. 이것은 또 다른 도트 연산자입니다. 이 도트 연산자는 out 변수 내에서 println 메소드에 대한 액세스를 제공합니다.
println 이 이름은 PrintStream 클래스 내의 메서드 이름입니다. 이 방법은 특히 매개 변수의 내용을 콘솔에 인쇄하고 뒤에 개행 문자를 삽입합니다.
( 이 괄호는 메서드가 액세스되는 (필드가 아니라) 것을 나타내며 println 메서드로 전달되는 매개 변수를 시작합니다.
"Hello, World!" 이것은 파라미터로서 println 메소드에 건네받는 String 리터럴입니다. 각 끝의 큰 따옴표는 텍스트를 문자열로 구분합니다.
) 이 괄호는 println 메소드에 전달되는 매개 변수의 종결을 나타냅니다.
; 이 세미콜론은 문장의 끝을 표시합니다.

주 : Java의 각 명령문은 세미콜론 ( ; )으로 끝나야합니다.

그런 다음 메서드 본문과 클래스 본문이 닫힙니다.

    }  // end of main function scope
}      // end of class HelloWorld scope 

OO 패러다임을 보여주는 또 다른 예가 있습니다. 하나의 (예, 하나!) 멤버가있는 축구 팀을 모델로 만들어 보겠습니다. 더 많은 것들이있을 수 있지만, 우리가 배열에 도달 할 때 그것을 논의 할 것입니다.

먼저 Team 클래스를 정의 해 보겠습니다.

public class Team {
    Member member;
    public Team(Member member) {  // who is in this Team?
        this.member = member;  //  one 'member' is in this Team!
    }
}

이제 Member 클래스를 정의 해 보겠습니다.

class Member {
    private String name;
    private String type;
    private int level; // note the data type here
    private int rank; // note the data type here as well

    public Member(String name, String type, int level, int rank) {
        this.name = name; 
        this.type = type;
        this.level = level;
        this.rank = rank;
    }
}

우리는 왜 여기에서 private 사용합니까? 음, 누군가 당신의 이름을 알고 싶다면, 주머니에 들어가서 사회 보장 카드를 꺼내지 말고 직접 물어봐야합니다. 이 private 는 외부 엔티티가 변수에 액세스하는 것을 방지합니다. getter 함수 (아래 참조)를 통해서만 private 멤버를 반환 할 수 있습니다.

모든 것을한데 모으고 앞에서 논의한 getters와 main 메소드를 추가하면, 우리는 다음을 얻게됩니다 :

public class Team {
    Member member;
    public Team(Member member) {  
        this.member = member;  
    }

    // here's our main method
    public static void main(String[] args) {
       Member myMember = new Member("Aurieel", "light", 10, 1); 
       Team myTeam = new Team(myMember); 
       System.out.println(myTeam.member.getName());
       System.out.println(myTeam.member.getType());
       System.out.println(myTeam.member.getLevel());
       System.out.println(myTeam.member.getRank());
    }
}

class Member {
    private String name;
    private String type;
    private int level;
    private int rank;

    public Member(String name, String type, int level, int rank) {
        this.name = name; 
        this.type = type;
        this.level = level;
        this.rank = rank;
    }
    
    /* let's define our getter functions here */
    public String getName() { // what is your name?
        return this.name; // my name is ...
    }
   
    public String getType() { // what is your type?
        return this.type; // my type is ...
    }
    
    public int getLevel() { // what is your level?
        return this.level; // my level is ...
    }
    
    public int getRank() { // what is your rank?
        return this.rank; // my rank is
    }
}

산출:

Aurieel
light
10
1

이데 폰에서 실행

다시 한번, Test 클래스의 main 메소드는 우리 프로그램의 진입 점입니다. main 메소드가 없다면 JVM (Java Virtual Machine)에 프로그램 실행을 시작할 위치를 알릴 수 없습니다.


1 - HelloWorld 클래스는 System 클래스와 거의 관계가 없으므로 public 데이터에만 액세스 할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow