본문 바로가기

Program/JAVA

JAVA 버전, JAVA 구조, 객체, NULL, \ , static, final, 이름 설정 방법, 오버라이딩, 오버로딩, 자료형 연산, continue, break, for문 이름 설정

22.07.18-JAVA 버전, JAVA 구조, 객체, NULL, \ , static, final, 이름 설정 방법, 오버라이딩, 오버로딩, 자료형 연산, continue, break, for문 이름 설정

JAVA의 버전


oracle jdk → 유료

openjdk + 추가기능

open jdk → 무료

주로 무료 버전 사용, 버전은 1.8사용

구조


변수 : 값을 저장하기 위한 것

연산은 ⇒ CPU 처리

변수 ⇒ RAM ( static,stack, heap 영역으로 나눔

stack : heap에 저장되어있는 주소를 저장, ram이 알아서 지움

heap : 실제 데이터가 저장된 곳 )

가비지 컬래션(자바의 기본 기능) : stack영역이 지워지면, heap 영역이 지워진다.

변수 기본형 : int, double, char ⇒ stack에 저장됨, heap에 저장되지 않음

변수 참조형 : String , 객체 ⇒ stack에 주소가 저장되고, heap 영역에 값이 저장된다.

객체


객체 : 변수를 좀 더 현실세계에 맞게 저장하고 싶어서 만든 것

객체 안의 멤버변수 = 속성

Student s1 = new Student();
Student s2 = new Student();
Student s3 = s1;

주소값 : s1,s3 같음, s2 다름 

s1과 같은 객체들은 ram의 stack부분에 주소가 저장됨

public class Computer {
   int ram;
   int hdd;

//   int x, y; => 컴퓨터의 속성이 아님
   //덧셈
    public void add(int x, int y){ //파라미터로 지정해야 말이 됨
        //지역변수 메소드 안에서 사용하고 버릴 것들
        int z = x+y;
    }

}

NULL


NULL : 저장되어있는 주소값을 없애는 것

Student s1 = new Student();
Student s2 = new Student();
Student s3 = s1;

s1= null;
s3= null;
s1이 참조하는 주소를 지우고, s3까지 지워야
 이렇게 해야 heap영역에 있는 가비지 컬랙션이 지워진다. 

\


\b : 백스페이스

c++에서 한 글자는 1byte

JAVA 에서 한 글자는 2byte ⇒ 사용하면 깨지는 이유

\r : 커서를 다시 처음으로

\n : 엔터 (\r\n 으로 사용해야함 ), 커서가 밑으로 내리고 앞으로 감

\l : 커서를 밑으로 내림

if문


if를 두개 써서 비교하는 것과 if-else를 사용하는 것의 차이

⇒ cpu 처리 횟수를 줄일 수 있다.

else-if 문

참이면 그 이후에 조건문을 보지않고 넘어가는데 if만 있으면 있는대로 검사

⇒ 조건을 검사하는 횟수의 차이

static, final


객체 : 간장게장

속성 : 가격, 만든사람, 이름

public class crab {
//속성
    String maker= "김수미";
    String name;
    int price;
}

static : 객체를 생성할 때 공통된 속성을 지정

⇒ 객체를 많이 만들게 되면 heap에 계속 각각 저장이 되는데 공통된 속성을 가지고 있는것을 따로 static을 붙이면 램 낭비를 줄일 수 있다.

⇒ static의 변수를 수정하게 되면 전체의 값이 변경된다.

⇒static을 지정할 때 변수를 선언할 때 값도 같이 넣는다.

final : 수정을 할 수 없다, 변수 이름은 대문자로, 애초에 변경이 안될 때 작성

public class crab {
    static final String PRODUCER= "김수미";
    String name;
    int price;
    double weight;

}

이름 설정 방법


낙타체

변수명을 지을 때 합성어일때 대문자를 입력

ex 개의 나이 = dogAge

중간고사 점수 = midScore

스네이크 체

변수명을 지을 때 합성일때 _를 사용

ex 개의 나이 = dog_age

중간고사 점수 = mid_score

변수명으로 쓸 수 있는 특수문자 : _ , $

참조형 변수는 시작이 대문자로 해야함

클래스,패키지 이름 설정

클래스를 생성할때는 대부분 참조형일것이고 이는 참조형 변수이므로 시작을 대문자로 시작

용량


byte : 1byte

short : 2byte

int : 4byte

long : 8byte

이런거를 알기에는 컴퓨터가 너무 좋아졌다.

참조형 : 프로세스가 몇 비트짜리인지에 따라 다름

오버라이딩, 오버로딩


오버로딩 : 같은 이름의 메소드를 여러개를 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술

오버라이딩 : 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용

자료형 연산


int + String = String

double + String ⇒ String

int + double = double

int + long = long

기본형 + String = String

헷갈리는거


System.out.println("/oyo\\");
String name ="lsc";
int age = 25;
double weight = 70.4;
boolean solo = true;
System.out.printf("%s %d %1f %d",name,age,weight, solo);

로또


import java.util.ArrayList;
import java.util.Random;

public class OMain7 {
    public static void main(String[] args) {
        //로또 프로그램
        //6개를 랜덤으로 중복 x
        Random r = new Random();
        int lotto[] = new int[6];
        for(int i =0; i<lotto.length;i++){
            lotto[i] = r.nextInt(45)+1;

        }
        for(int i =0; i<lotto.length-1;i++){
            if(lotto[i]==lotto[i+1]){
                System.out.println("error");
                lotto[i+1] = r.nextInt(45)+1;
            }
        }

        for(int i : lotto){
            System.out.println(i);
        }

    }
}

continue, break차이


break : 반복문을 빠져나옴

continue : 반복문에서 다음 조건으로 넘어감 반복문의 continue를 만나게 되면 다시 조건을 확인하러 올라감

  for(int i=0; i<10;i++){
            if(i==5){
//                break;
                continue;
            }
                    System.out.println(i);
        }

for문 개선


//java 1.5 이상
gd:for(int i =0; i<args.length;i++){
    gd2:for(int j =0; j<args.length;j++){
        break gd2;
    }
}

for문에 이름을 지정해서 break를 선택해서 할수 있다.