- API
-> Application Programming Interface
-> 프로그래밍을 할때 특정한 기능을 처리할 수 있도록 만들어놓은 클래스나 메소드의 집합
-> 코딩을 쉽게할 수 있도록 만들어 놓은 것
import java.util.Scanner;
Scanner sc = new Scanner(System.in);//Scanner형 sc을 참조하고 그 주소를 저장한거랑 똑같
다. 매개변수는 System.in을 썼다.
sc.next();//문자열 입력받은것 -> Scanner 클래스로만들어진 객체에 next()라는 메소드를 호출
한모양이다.
sc.nextInt(); //-> nextInt() 메소드 호출
sc.nextDouble(); //-> nextDouble() 메소드 호출
이걸 보자면
구글에서 -> oracle.com documentation library -> 쳐보기 -> Oracle help 센터 누르기
->https://docs.oracle.com/en/->java로고 누르기 -> https://docs.oracle.com/en/java/ ->
Java SE documentation 클릭하기 -> JDK 8로 누르기 -> 우리버전이 JDK8이다. -> All Books 누
르기 -> JAVA SE아래에 API Documentation 누르기 -> 왼쪽 위에는 java.util 선택후 그 아래칸
에 -> Scanner클릭하기 그럼 좋은 말들이 써져있다.
java.lang : 자바프로그래밍을 위한 기본적인 패키지와 클래스를 포함
java.util : 프로그램을 제어하기 위한 클래스, 데이터 저장하기 위한 클래스
java.io : 키보드, 모니터, 프린터, 파일 등을 제어하는 클래스
java.net : 통신관련
패키지명을 java로하면 안되는게 시스템에서 쓰고있어서 그렇다.
-> API를 사용해서 프로그래밍을 할것이다. 몇가지 해보겠다.
- String, StringBuffer, StringBuilder
String 클래스
-> 문자열 값을 수정 못함 immutable(불변)
-> 수정시 수정된 문자열이 새로 할당되어 새 주소를 줌
-> 문자열을 자주 변경하는 경우 메모리낭비가 심함
StringBuffer 클래스
-> 문자열 값을 수정할 수 있음 mutable(가변)
-> 문자열을 자주 변경하는경우 String보다 효율적
-> 기존문자열에 수정되어 적용
-> 쓰레드 safe 기능 지원
※ 쓰레드 safe : 동시에 한 자원에 접근하지 못하게 잠그는 기능 -> 읽기전용으로 열리게끔
해주는게 StringBuffer에있다.
-> 성능저하발생시킬 수 있음.
StringBuffer의 메소드
-> capacity : 실제 할당된 공간의 크기를 알 수 있음
-> length() : 실제문자열 길이 가져온다.
-> reverse() : 문자열을 거꾸로 재배치 한다(12345 -> 54321)
-> insert() : 문자열의 특정위치에 문자열 추가
-> append() : 문자열 끝에 문자열 추가
-> delete() : 문자열 일부 삭제
-> replace() : 문자열 일부분을 다른 문자열로 대치
========================================================================================
글자를 넣고 싶다면 append를 추가할수 있다.처음부터 들어갈것이다.
StringBuilder
-> StringBuffer와 동일
-> 쓰레드 safe 지원하지 않는다.
API에서는 왜이렇게 되는지 없다. 자바가 만들어서 준거기때문이다.
StringTokenizer 클래스를 해보겠다.
-> 문자열을 분석해서 토큰으로 분리시켜줌
-> 파일에 저장된 텍스트를 처리하는 경우에 유용하게 사용함
-> 생성시 전달받은 문자열을 구분자로 사용하여 각 토큰에 저장
메소드
-> countTokens() : 꺼내지 않고 남아있는 토큰의 수
-> hasMoreTokens() : 남아있는 토큰이 있는지 확인(true/false반환) -> boolean형태
-> nextToken() : 토큰을 하나씩 꺼내옴
=============================================================================
- Math 클래스
-> 수학에서 자주 사용하는 상수들과 메소드들을 구현해놓은 클래스
-> static메소드 -> 객체화할 필요가 없다.
String Buffer sb = new StringBuffer();
===============================================================
- Calendar 클래스
-> 현재 시간이랑 관련있는 클래스
Calendar today = Calendar.getInstance();//new가 없다.이게 바로 Calendar의특징이다.
//생성자가 protected로 되어있다.
//부모객체모양을통햏 자식객체가 만들어진다. 이걸보고 다형성이라하는데 지
금 적용되어있다.
//-> 년,월,일,시,분,초 정보를 다룰 수 있다.
//-> 주의사항 월이 0부터 시작->월 출력시 +1
-> Calendar 클래스의 생성자는 Protected이기 때문에 new를 통해서 객체생성이 불가능
get Instance()메소드를 통해서 객체를 생성
GregorianCalendar -> 객체가 생성된다. -> Calendar클래스의 자식클래스
System.out.println(today.get(Calendar.YEAR));//년정보 가져온다.,get메소드를 호출한것이다.
today.get(Calendar.YEAR);//
===================================================================
Date 클래스
-> 시스템에서 현재 날짜, 시간정보를 가져와서 다루는 클래스
-> 거의 사용안하고 Calendar을 쓴다.
-> java.util.Date
SimpleDateFormat 클래스
-> Date의 날짜, 시간정보를 원하는 format으로 출력하도록 기능을 제공
-> java.text.SimpleDateFormat
===================================================================
실습문제
Calendar 클래스 사용
오늘 날짜에 대한 객체 생성
년, 월, 일, 시, 분, 초 값을 각각 변수에 분리 저장한 후 하나의 문자열로 출력해보시오
2018년 7월 30일 월요일로 나오면 된다.
====================================================================
package kh.java.test;
import java.util.StringTokenizer;
public class Example {
public void main() {
StringBuffer str = new StringBuffer();
//스트링 버퍼 참조변수 str에 주소값을 가졌다.
// System.out.println(str.length());//길이를 봤다.
//출력하면 0이라고 나온다.만들기만하고 아무문자열도 저장안했기 때문이다.
System.out.println(str.capacity());
//16자리 공간을 저장할수있는걸 만든다.
str.append("kh");
System.out.println("append : "+str);
//kh라는걸 str에 삽입한 것이다.
str.append("java");
System.out.println("append : "+str);
//kh가있고 뒤에 java가 들어가서 khjava가 표시된다.
str.insert(3, "Hello");
//특정위치에 문자열을 추가한다는 것이다.
//3번째 글자뒤에 Hello를 붙여 라는 것이다.
System.out.println("insert 3,Hello : "+str);
str.replace(0, 2, "love");
//첫번째 두번째 글자를 k,h를 love로 바꿔버린 것이다.
//문자열 일부분을 다른 문자열로 대치하는 것이다.
System.out.println("replace 0,2 : "+str);
str.reverse();
//거꾸로 출력하게 해주는 것이다.
System.out.println("reverse : "+str);
str.reverse();
System.out.println("reverse : "+str);
str.delete(11, 12);//11번부터 1개지우라는 것이다.
System.out.println("delete 11,12 : "+str);
str.delete(5, 7);//첫번째는 0부터 시작한다는걸 알고있기 그후 2개 지우는것이다.
System.out.println("delete 5,7 : "+str);
str.append("wwwwwwwwwwwwwwwwww");
System.out.println("append wwwwwwwwwwwwwwwwww : "+str);
str.delete(2, 4);
System.out.println("delete 2.4 : "+str);
str.insert(2, "jongkyu");
System.out.println("insert 2,jongkyu : "+str);
System.out.println("====================================");
String str1 = "홍길동/20/경기도";
StringTokenizer sT = new StringTokenizer(str1,"/");
//str1이라는 문자열을 주었고 구분자로 쓸것이 /이거이다.
// /을 기준으로 토큰단위로 자름
System.out.println(sT.countTokens());
//이렇게 하면 홍길동하고 구분자 하나있고 20 하고 있고 경기도 있다. 그래서 3개가 뜨는 것이다.
//구분자를기준으로 나눠진게 몇개인지 보는것이다.
System.out.println(sT.nextToken());
//첫번째 토큰을 하나 갖고온다.
System.out.println(sT.hasMoreTokens());
//토큰을 하나꺼내고나서 하나 남아있으니 true라고 표시한다.
System.out.println(sT.countTokens());
//토큰 몇개인지 물어본다.
System.out.println(sT.nextToken());
//아까 토큰을 하나 썼으니 이번엔 2번째 토큰을 갖고온다.
System.out.println(sT.hasMoreTokens());
//남아있는 토큰을 본다.
System.out.println(sT.countTokens());
//토큰 몇개인지 물어본다.
System.out.println(sT.nextToken());
//아까 토큰을 하나 썼으니 이번엔 3번째 토큰을 갖고온다.
System.out.println(sT.hasMoreTokens());
//남아있는 토큰을 본다.남은거까지 다 했으니 false가 온다.
System.out.println(sT.countTokens());
//토큰을 다썻으니 남아있는게 없다.
}
}
==========================================================
package kh.java.test;
import java.util.StringTokenizer;
public class Example1 {
public void main() {
String str = "J a v a P r o g r a m";
StringBuffer sb = new StringBuffer();
StringTokenizer sT = new StringTokenizer(str," ");
//문제 공백 단위로 빼주기.전부다 대문자로 변경해서 sb에 넣어서 출력하기
//출력은 sb에 담아서 출력하기
char [] ch=new char[sT.countTokens()];
//System.out.println(sb);
//이렇게 했을때 결과가
//JAVAPROGRAM 으로 나오면 된다.
System.out.println(sT.countTokens());//11개가 있다.
for(int i=0; i<ch.length; i++) {
ch[i]=sT.nextToken().charAt(0);
if(ch[i]>=65 && ch[i]<=90) {
}
else {
ch[i]^=32;
}
sb.append(ch[i]);
}
System.out.println(sb);
}
}
===========================================================================
public void main1() {
System.out.println(Math.abs(-10));//절대값 리턴하는 것이다.
System.out.println(Math.ceil(10.1));//값을 올림해준다.
System.out.println(Math.floor(10.9));//주어진값을 버린다.
System.out.println(Math.random());//소수값을 랜덤으로 출력한다. 0<x<1 임의값
System.out.println(Math.max(10, 20));//최대값을 출력
}
===========================================================================
public void main2() {
Calendar today = Calendar.getInstance();//new가 없다.이게 바로 Calendar의특징이다.
//생성자가 protected로 되어있다.
//부모객체모양을통햏 자식객체가 만들어진다. 이걸보고 다형성이라하는데 지금 적용되어있다.
//-> 년,월,일,시,분,초 정보를 다룰 수 있다.
//-> 주의사항 월이 0부터 시작->월 출력시 +1
System.out.println(today.get(Calendar.YEAR));//년정보 가져온다.,get메소드를 호출한것이다.
today.get(Calendar.YEAR);//
System.out.println(today.get(Calendar.MONTH)+1);//7월이니 현재시간기준으로 갖고온다.
System.out.println(today.get(Calendar.DATE));//오늘 날짜 가져온다.
System.out.println(today.get(Calendar.AM_PM));//오전이면 0 PM이면1이라고 반환해준다.
System.out.println(today.get(Calendar.HOUR));//시간이 뜬다.
System.out.println(today.get(Calendar.MINUTE));//분이 뜬다.
System.out.println(today.get(Calendar.SECOND));//초가 뜬다.
System.out.println(today.get(Calendar.DAY_OF_WEEK));//요일이 뜬다.월요일이니 2가 뜬 것이다.
//Calendar.AM_PM -> 오전이면0, 오후면1
//Calendar.DAY_OF_WEEK -> 1은 일요일, 2는 월요일...7은 토요일
today.set(Calendar.YEAR, 2011);//2011로 바꿔라.
System.out.println(today.get(Calendar.YEAR));//2011을 출력해라.
}
==================================================================
public void main3() {
Date today = new Date();//현재시간을 그대로 갖고온다.
Date today2 = new Date(123456789L);//정수형중 long형태
//long형 정수값을 이용해서 날짜시간을 계산합니다.(밀리초)
//기준은 1970년 1월 1일 09시 00분 00초 를 기준으로 한다.
//123456789L 밀리초가 흘렀을 경우 값이 나오는 것이다.
System.out.println(today);
System.out.println(today2);
/*
* 123456789 밀리초 = 123456.789초, 123456으로 하자면//소수점은 원래 써서 계산해야되는데
* 귀찮아서 버렸다.근사값만 알려고한다.
* 34시간이 지난 다음이다.(60으로 2번 나눠주면된다.)대충 이정도 나오곘다.
*
*/
}
===================================================================
public void main4() {
Date today = new Date();
SimpleDateFormat t = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat t1 = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
String str1 = t.format(today);
//today 오늘날짜를 세팅해서 str1에 대입한다는 것이다.
String str2 = t1.format(today);
//today 오늘날짜를 세팅해서 str2에 대입한다는 것이다.
System.out.println(str1);//이렇게 할경우 t의 형태가 년월일이기 때문에 이렇게 나온다.
System.out.println(str2);//이렇게 할경우 t1의 형태가 초까지 있어서 이렇게 나온다.
}
======================================================================
public void main5() {
//2018년 7월 30일 월요일로 나오면 된다.
Calendar today = Calendar.getInstance();
int year=today.get(Calendar.YEAR);
int month= today.get(Calendar.MONTH)+1;//7월이니 현재시간기준으로 갖고온다.
int date=today.get(Calendar.DATE);//오늘 날짜 가져온다.
int hour=today.get(Calendar.HOUR);//시간이 뜬다.
int min=today.get(Calendar.MINUTE);//분이 뜬다.
int sec= today.get(Calendar.SECOND);//초가 뜬다.
int day=today.get(Calendar.DAY_OF_WEEK);
String day1 = null;
if(day==1) {
day1="일";
}
else if(day==2) {
day1="월";
}
else if(day==3) {
day1="화";
}
else if(day==4) {
day1="수";
}
else if(day==5) {
day1="목";
}
else if(day==6) {
day1="금";
}
else if(day==7) {
day1="토";
}
System.out.println(year+"년"+month+"월"+date+"일"+hour+"시"+min+"분"+sec+"초"+day1+"요일");
}
======================================================================
![](https://t1.daumcdn.net/cfile/tistory/99135A485B5E919835)
![](https://t1.daumcdn.net/cfile/tistory/995E59425B5E91B702)