본문 바로가기

JAVA공부(이것이 자바다)

(17)
상속 이어서 JVM 메모리 영역 - 추상메소드와 오버라이딩 부분 추상메소드를 통해 메모리를 절약하고, 오버라이딩으로 자식클래스에 선언된 메소드를 부모 참조변수를 통해 참조하는 과정 추상메소드가 메모리를 절약하는이유는 {}안의 내용이 메소드 영역에 올라가지 않고 단지 null을 가지기 때문이다. object클래스의 vfptr이라는 테이블에서 메소드와 주소를 연관지어 저장하고 있는데 컴파일러가 자식클래스를 스캔했을때 동일한 메소드가 있다면 그 메소드를 가리키는 주소값으로 변경해서 테이블에 저장한다. 만약 추상클래스가 부모클래스에 선언되어있다면 메소드 영역에서는 최소한의 공간을 차지하면서 테이블에만 연관된 주소를 저장하기 때문에 메모리를 절약할 수 있다. instanceof 부모변수를 통해서 자식을 참조하고 있을때 자식객..
상속 상속 부모 클래스를 자식클래스가 상속받을 때는 extends를 사용한다. public class 자식클래스 extends 부모클래스{ } 자식클래스가 부모클래스를 상속받으면 생성자에서 부모의 기본 생성자를 부르는 코드를 자동으로 생성해준다. public 자식클래스(){ super(); } 이때 부모에 기본생성자가 없으면 에러가 발생하기 때문에 매개변수까지 넣어서 딱 불러주면 오류 없어진다. 부모에서 private로 선언된건 접근할 수 없지만 상속은 받는다. 부모에서 선언된 애들은 자식의 참조변수를 통해 필드와 메소드로 접근가능하다. 메소드 재정의(= 메소드 오버라이딩) --> 다형성을 위해서 오버라이딩 규칙 1. 부모 메소드의 선언부와 동일해야 한다. 2. 접근 제한을 더 강하게 오버라이딩할 수 없다. ..
클래스 이어서 정적블록 정적필드를 초기화해주기 위해서 써주는 블록이다. main보다 먼저 클래스가 로딩될때 실행된다. static{ } 정적블록은 클래스가 메모리로 로딩될때 자동으로 실행된다. 정적블록이 여러개라면 선언된 순서대로 실행된다. 정적메소드 정적메소드와 정적 블록에서 인스턴스 멤버를 사용하려면 객체를 먼저 생성하고 참조변수로 접근해야한다. final 프로그램 실행 도중에 수정할 수 없게 하기 위해서 사용하는 변수를 상수화 하기 위한 키워드이다. 초기화 1. 필드 선언시에 초기값 대입 2. 생성자에서 초기값 대입 --> 초기화하지 않고 그대로 두면 컴파일에러 상수 선언 상수는 모든 객체에서 하나만 필요한 경우가 많다. 그래서 static변수로 선언해주면 부가적인 메모리를 잡아먹지 않는다. static fina..
java참조타입 이어서 main()안의 arguments넣기 논리오류/ 구문오류 구문오류: 컴파일러가 컴파일하면서 알아서 잡아준다. 따라서 오류를 발견하기 쉽고 처리시간은 짧게 걸린다. 논리오류: 개발자가 오류를 잡아야해서 오류를 발견하고 처리하는 시간이 오래걸린다.(안좋게는 멘탈도 안좋아짐) 배열 항목 반복을 위한 향상된 for 문(range base for loop) for문을 사용하게 되면 인덱스 연산후에 사용하려고 할때 인덱스 밖에 존재하지 않는 데이터를 참조하는 논리 오류를 범할 수 있다. 이러한 논리 오류는 발견하기 어려우므로 구문오류로 바꿔서 컴파일러를 통해 오류를 발견할 수도 있다. 향상된 for문 1. 항상 배열 전체를 순회하도록 한다. 2. 현재 값이 배열에서 존재하는 위치를 알 수 없다. 3. 인덱스를 통한..
java의 참조타입 함수의 구성 찾아보기 ctrl + 함수명클릭 JVM JVM OS H/W jvm은 자바가 설치된 폴더 안에 server 폴더 안에 jvm.dll라는 것을 os위에 돌려서 실행된다 JVM은 class파일을 실행 할때 코드변환을 할 때 딜레이가 걸린다. 프로세스 프로그램은 여러개 실행이 가능하다. 실행이 된 프로그램을 프로세스라고 한다. 프로세스를 실행하면 논리적으로 4GB의 PCB를 할당하게 되고 이 PCB는 프로세스가 실행되는 동안 필요한 내용을 저장한다. 4GB의 할당은 논리적으로 되는 거니까 최대 4GB까지 사용할 수 있다는 것이지 실제로 4GB를 할당하지는 않는다. OS가 알아서 할당하고 프로그램도 있는대로 실행할 수 있다. PCB구성 Data code 프로세스를 실행하게 되면 RAM에 코드가 올라간..
java의 연산자와 조건문 반복문 이클립스의 사용 프로젝트를 닫아서 메모리 절약하기 이클립스는 메모리를 많이 잡아 먹는 프로그램이다. 이클립스는 열려있는 프로젝트를 모니터링해서 바뀐부분을 관찰해주게 계속 돌아가기 때문이다. 그래서 빠르게 쓰려면 워크 스페이스에서 내가 사용하고 있는 프로젝트만 열어서 쓰는게 빠르다. 그러려면 사용하지 않는 프로젝트를 닫아주어야한다. 닫아주면 열려있는 ch03프로젝트와 prac프로젝트의 폴더 스타일이 달라진다. 더블클릭하면 다시 열린다. 프로젝트 위치 찾기 Location에 프로젝트의 위치가 나온다. 자바의 오버플로우와 언더플로우 -128 -127 ... .... .... .... 126 127 byte자료형에서 -128에서 -1을 하면 언더플로우가 일어나서 byte의 가장큰 크기인 127로 숫자가 변한다...
java의 변수 기본형 자료형 (primitive type) 부울형 boolean 1bit 정수형 byte 1byte short 2byte int 4byte long 8byte 실수형 float 4byte double 8byte 면접에서 질문할 수 있는 부분 : primitive type 종류 말해 보세요!! 변수명/변수값 자바 > 변수에 아무것도 대입되지 않으면 못쓴다. 초기화 선언시 지정한다. int age = 10; 선언되어있는 변수에 대입한다. age = 10; 아스키코드 윈도우에서는 enter가 \n\r을 한다. \n -> 13 다음줄로 바꿈, \r -> 10 맨앞으로 커서 변경(10진수) 실수 float 7자리까지 - > double보다 4배 빠르지만 정밀도가 떨어진다. double 15자리까지 -> 정밀도는..
java 설치와 사용 변환 프로그래밍언어를 실행 할때는 변환과정을 거친다 두가지 방법이 있는데 컴파일 컴파일은 소스코드를 한번에 처리하고 실행이 빠르다 인터프리터 인터프리터는 한줄씩실행하고 동적이고 실행이 느리다 java가 나온이유 cpu의 명령어가 각 회사별로 다르다 0001- add 0002-load 이런식으로 지정되어있는 명령어가 다르다. 숫자는 명령어나 계산할 값으로 해석 될 수 있다. 이러한 부분들은 각각의 cpu에서 컴파일을 하고 실행을 해야 해서 불편함이 있어 jvm을 통해 실행된 class파일만 있으면 어디서든 실행 될 수 있도록 한 것이 java언어이다. java 설치 jdk 8버전을 설치하고 17버전을 설치했다 x64 msi installer를 설치했다 jdk 8버전 설치 x64 installer를 설치했다..