[23년 1회]
class Static{
public int a=20;
static int b=0;
}
public class Main{
public static void main(String[] args){
int a = 10;
Static.b=a;
Static st = new Static();
System.out.println(Static.b++);
System.out.println(st.b);
System.out.println(a);
Systme.out.println(st.a);
}
}
정답
10
11
10
20
[풀이]
✔️ static 필드 b는 모든 객체가 공유, 어떤 객체로 접근하던지간에 b의 값은 동일
System.out.println(Static.b++);
→ b의 현재 값 출력 = 10 , 출력 후 b++로 인해 b는 11이 됨
System.out.println(st.b)
→ st객체를 통해 b를 출력하지만, b는 정적 필드이기 때문에 11이 출력
System.out.prinlnt(a)
→ 지역변수 값 출력 = 1-0
System.out.println(st.a)
→ st객체의 a 값이 20 출력
class Parent{
int x = 100;
Parent() {
this(500);
}
Parent(int x){
this.x = x;
}
int getX(){
return x;
}
}
class Child extends Parent{
int x = 1000;
Child(){
this(5000);
}
Child(int x) {
this.x = x;
}
}
public class Main{
public static void main(String[] args){
Child obj = new Child();
System.out.println(obj.getX());
}
}
정답 : 500
[풀이]
✔️ 상속 관계에서는 Parent의 생성자를 무조건 먼저 호출함 !
1. main함수에서 Child obj 생성 → Child 생성자 호출
2. Child클래스는 Parent 클래서 상속 → Parent 생성자 먼저 호출
3. 매개변수 없음 → Parent() 호출 → x = 500
4. 매개변수 없음 → Child() 호출 → x = 5000
5. obj.getX() → Child에 없음 → Parent에서 호출 → Parent의 x 값으로 출력
[2023년 2회]
public class Main{
public static void main(String[] args){
String str1 = "Programming";
String str2 = "Programming";
String str3 = new String("Programming");
System.out.println(str1 == str2);
System.out.println(str1 == str3);
System.out.pinrtln(str1.equals(str3));
System.out.print(str2.equals(str3));
}
}
정답
true
false
true
true
[풀이]
str1, str2는 리터럴로 문자열을 생성하므로 같은 메모리 주소 할당
str3는 새로운 객체를 생성한 것이므로 str1, str2와는 다른 메모리 주소 할당
출력문 1번과 2번은 객체 주소를 비교하는 것
출력문 3,4는 내용 비교
[2023년 3회]
public class Main{
public static void main(String[] args){
A b = new B();
b.paint();
b.draw();
}
}
class A{
pubilc void paint(){
System.out.print("A");
draw();
}
public void draw(){
System.out.print("B");
draw();
}
}
class B extends A{
public void paint(){
super.draw()
System.out.print("C");
this.draw();
}
public void draw(){
System.out.print("D");
}
}
정답
BDCDD
[풀이]
b.paint()
→ 오버라이딩된 메서드 paint()를 실행
- super.draw() = BD
: 오버라이딩 된 메서드가 우선적으로 실행되기 때문에 class A에서 호출하는 draw()는 class B의 메서드가 호출됨
- this.draw()
→ class B에 있는 draw가 호출
➡️ BDCD
b.draw()
→ 오버라이딩 된 메서드 draw() 호출
➡️ D
class Person{
private String name;
public Person(String val){
name = val;
}
public static String get(){
return name;
}
public void print(){
System.out.println(name);
}
}
public class Main{
public static void main(String[] args){
Person obj = new Person("Kim");
obj.print();
}
}
// 다음 코드에서 오류가 발생하는 코드 라인수를 적으시오
정답 : 7
(return name;)
[풀이]
get()은 static 메서드 → static 영역에 저장됨
get()에서 사용된 name 변수는 static 키워드가 붙지 않고, 메서드 외부에 선언된 인스턴스 변수
name 변수가 static으로 선언되지 않았는데 static 함수에서 return 하게 되면 오류가 발생함
✔️ static 메서드는 static 변수만 참조할 수 있음
'정보처리기사[실기]' 카테고리의 다른 글
[Python] 20년 기출 문제 풀이(1회 ~ 4회) (0) | 2024.10.14 |
---|---|
[JAVA] 24년 기출 문제 풀이(1회, 2회) (0) | 2024.10.13 |
[JAVA] 22년 기출 문제 풀이 (1회 ~ 3회) (0) | 2024.10.13 |
[JAVA] 21년 기출 문제 풀이 (1회 ~ 4회) (0) | 2024.10.11 |
[JAVA] 20년 기출 문제 풀이 (1회 ~ 4회) (0) | 2024.10.07 |