파라미터자리의 활용? 메소드, 생성자에서 활용하는 것의 연습이 필요하다.
섞어쓰기? 자연스럽게 메소드와 생성자를 오가는 연습, 클래스를 오가는 코드가 그려져야한다.
class Param{
int ival;
}
public class TestParam {
//디폴트 생성자
TestParam(){
System.out.println("TestParam 호출");
Param p = null;
effectParam(p);
}
//파라미터 자리 참조형타입 연습, 파라미터 자리를 갖는 건 생성자와 메소드
void effectParam(Param p) { //p는 널인가?
}
public static void main(String[] args) {
TestParam tp = new TestParam();
/*이 방법보다는 위의 생성자에 null값을 넣는 연습이 필요
tp.effectParam(null); //null
Param p = null;
tp.effectParam(p); //null
p = new Param();
tp.effectParam(p); //null
*/
}
}
default 생성자 : 파라미터값 x
생성자의 파라미터값은 인스턴스화할 때 생성(선언만 아니라 생성도 포함)
생성자를 통해 값의 초기화 가
import javax.swing.JFrame;
public class JFrame1 {
//선언부
int width;
int height;
JFrame jf = null; //선언과 생성 나눠서 써보기
//생성자 -> 리턴타입x,
JFrame1(){
System.out.println("디폴트 생성자");
jf = new JFrame();
System.out.println("지역변수 : "+width+", "+height+"/ 전역변수 : "+this.width+", "+this.height);
jf.setTitle("입력|수정|삭제");
} //default 생성자
JFrame1(int width){ //생성자의 파라미터값은 인스턴스화할 때 생성(선언만 아니라 생성도 포함)
System.out.println("파라미터 한 개 있는 생성자");
jf = new JFrame();
System.out.println("지역변수 : "+width+", "+height+"/ 전역변수 : "+this.width+", "+this.height);
this.width = width;
height = 500;
String title = "토마토의 창";
jf.setTitle(title);
}
JFrame1(int width, int height){ //생성자의 파라미터값은 인스턴스화할 때 생성(선언만 아니라 생성도 포함)
System.out.println("파라미터 두 개 있는 생성자");
jf = new JFrame("입력|수정|삭제"); //이대로 생성하면 타이틀 생김.
System.out.println("지역변수 : "+width+", "+height+"/ 전역변수 : "+this.width+", "+this.height);
this.width = width;
this.height = height;
}
//사용자정의 메소드
public void initDisplay() { //아래 주석처리처럼 전변의 값을 정해둘 수 있음.
// this.height = 800;
// this.width = 700;
jf.setSize(width, height); //전변이기 때문에 바로 접근 가능
jf.setVisible(true);
}
//메소드
public static void main(String[] args) {
JFrame1 jf1 = new JFrame1();
jf1.initDisplay(); //가로 세로 기본값으로 창 생김
jf1 = new JFrame1(500,400);
jf1.initDisplay(); //JFrame 생성이 안되어있음 -> NullPointException -> 생성해서 에러 해결
jf1 = new JFrame1(300);
jf1.initDisplay(); //세로값은 초기화해둠.
}
}
객체배열 학습
public class EmpVOTest {
public static void main(String[] args) {
EmpVO eVOs[] = new EmpVO[3];
EmpVO eVO = new EmpVO(7466,"가디",3000);
System.out.println(eVO.getEmpno());
System.out.println(eVO.getEname());
System.out.println(eVO.getSalary());
System.out.println(eVO);
eVOs[0] = eVO;
eVO = new EmpVO(7599,"고디",4000);
System.out.println(eVO.getEmpno());
System.out.println(eVO.getEname());
System.out.println(eVO.getSalary());
System.out.println(eVO);
eVOs[1] = eVO;
eVO = new EmpVO(7398,"구디",7000);
System.out.println(eVO.getEmpno());
System.out.println(eVO.getEname());
System.out.println(eVO.getSalary());
System.out.println(eVO);
eVOs[2] = eVO;
for(int i=0;i<eVOs.length;i++) {
System.out.println(eVOs[i]);
}
}
}
섞어쓰기(메소드, 생성자를 오가며 섞어 쓰며 익숙해지기)
Call by …
관련 프로그램, 사이트 추천
계산기 실습
소켓
Time Server 구축
- [TimeServer.java](http://TimeServer.java) / TimeClient.java
- thread 검색 → run() 메소드 오버라이드
- [java.io](http://java.io) → ObjectInputStream, ObjectOutputStream
- [java.net](http://java.net) → ServerSocket, Socket
- TimeServer, TimeClient 클래스 생성(스레드 상속)
- TimeSever
- API를 받아서 현재시간 반환하는 메소드 설계
- Calendar.getInstance()
- 시간이 바뀌지 않는 것은 서버가 연결되지 않았기 때문
- 시간 출력은 필수로 처리할 수 있도록 예외처리 필요(try catch 사용)
```java
public static void main(String[] args) {
int port = 4000;
ServerSocket server = null; //존재만 함. 일x, ServerSocket은 예외처리를 반드시 하게 되어있는 클래스임.
Socket client = null; //일을 하는 소켓
try{
server = new ServerSocket(port);
} catch (IOException ie) {
System.out.println("해당 포트는 이미 사용중입니다.");
try {
server.close();
} catch (IOException e) {
System.out.println(e.toString());
}
}
System.out.println("TimeServer started successfully");
while(true) { //서버 24시간 작동 무한루프앞에선 예약만 받고, 서버가 자리로 안내하는...?!
try {
client = server.accept();
if(client!=null) {
System.out.println(client);
}
//System.out.println("New client connected..."+client.getInetAddress());
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
```
- TimeClient
- run메소드 오버라이드 → start()로 값 호출 가능(JVM 인터셉트)
- ObjectOutputStream/ObjectInputStream
```java
//다른 스트림 중 아래 선택이유? 내부적 직렬화, 다른 stream클래스보다 보안 높아서 사용
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
```