Java 검토 : 클래스 관리 및 공통 도구
꾸러미
- 프로그램 파일의 첫 줄에 쓰기
- Java 소스 파일에서 하나의 패키지 만 선언 할 수 있으며
선언문은 소스 파일의 첫 번째 명령어로만 사용할 수 있습니다. - 가져온 클래스는 비공개 클래스를 가져올 수 있지만 다른 패키지의 기본 권한을 사용할 수 없으므로 사용할 수 없습니다.
package Testp;
import Testpackage.*;
public class C {
public static void main(String[] args) {
A a=new A();
B b=new B();
}
}//Testpackage.*只能导入
- 이때 두 클래스 AB를 동일한 .class 파일에 넣지 마십시오. 그렇지 않으면 둘 중 하나가 비공개 클래스 여야하며, 비공개 클래스는 C에서 사용할 수 없습니다.
- 참고
.*是对于包来说的,当把AB分成两个class文件时就可以两个全部导入
- Java 컴파일러는 모든 프로그램에 대해 java.lang 패키지를 자동으로 가져옵니다.
- 이름이없는 패키지는 가져올 수 없습니다. * 이름이없는 패키지의 클래스는 가져올 수 없습니다.
- 정적으로 가져올 때 import aa .; static을 포함하여 클래스의 모든 멤버를 가져올 수 있습니다 . import static aa.A.; A에있는 모든 정적 멤버를 가져 오는 경우, 비정 적은 오류를보고합니다. , 정적으로 변경된 모든 멤버를 가져올 수 있습니다.
- 클래스 파일 (.java)은 퍼빅 클래스를 하나만 가질 수 있습니다. 패키지에 여러 개의 공용 클래스가있는 경우 여러 클래스 파일을 생성합니다.
래퍼 클래스
-
바이트, 짧은, 정수, 긴, 부동, 더블,
문자, 부울 -
래퍼 클래스에 대한 두 가지 유형의 생성자
包装器类名(基本类型值)
包装器类名(基本类型值的字符串)
- Character 클래스 생성자는 문자 매개 변수 만 될 수 있습니다.
- 부울 래퍼는 true / false에 대해 대소 문자를 구분하지 않습니다.
-
예:
float f=(new Double(100.2)).floatValue();
int i=(new Double("100.2").intValue());//XXXvalue():包装器类-基本类型
float f=Float.parseFloat("11.3f");
int d=Integer.parseInt("25");
//字符串-基本类型
Double d=Double.valueof("25.4");//Character包装器类没有这个方法
//字符串-包装器
//基本类型、包装器类型-字符串
String s1=Double.toString(3.14);//toString有静态方法也有实例方法
String s2=new Double(3.14).toString()
- 매개 변수를 전달할 때 매개 변수가 래퍼 클래스 인 경우 기본 유형은 직접 전달할 수 없으며 현재 자동 박싱 및 박싱 해제는 지원되지 않습니다.
- 생성자를 사용하여 자동으로 boxing하려면
- Double a = 1.2; // Double a = new Double (1.2); 자동 복싱
- double b = a; // 자동 언 박싱
세다
- 열거 형 열거 형 이름 {열거 형 상수 목록}
public class Ch_5_5_2 {
enum Season { 春季, 夏季, 秋季, 冬季; }
public static void main (String[] args) {
Season [] s= Season.values();
for (int i=0; i<s.length; i++)
{ switch(s[i]) {
case 春季: //case Season. 春季 编译错
System.out.println(“ 春困”); break;
case 夏季:
System.out.println(“ 夏打盹”); break;
case 秋季:
System.out.println(“ 秋乏”); break;
case 冬季:
System.out.println(“ 睡不够的冬三月”); break; }
}
}
}
어레이의 고급 애플리케이션
- 수입하려면
import java.util.Arrays;
- 정렬 방법과 binarySearch 전제는 배열이 내림차순 일 수없고, 순서가 지정되지 않거나 오름차순이 될 수 있다는 것입니다.
int i=Arrays.binarySearch(a1,3);
이 요소가 처음 나타나는 인덱스를 반환합니다.Arrays.fill(c,4);
배열 c를 4로 채 웁니다.
문자열의 고급 응용
-
StringBuilder : 동기화되지 않은 스레드는 안전하지 않지만 더 효율적으로 수행됩니다.
-
StringBuffer
정규식
-
정규 매칭 단계 :
Pattern p=Pattern.compile(reg1);//reg1为模式串正则表达式
Matcher m=p.matcher(str);//str是待匹配串
m.group();m.find;m.start()
String[ ] split(String regex)
regex는 구분자 문자열이거나 정규식 일 수 있습니다.
함수 : 문자열을 분할하고 배열을 생성합니다.
String s="aa,bb,cc,dd";
String[] sa=s.split(","); //以 , 作为s的分隔串,提取字符串
for(String s1:sa)
System.out.println(s1);
String replaceFirst(String regex, String rp)
함수 : regex의 첫 번째 모습을 rp로 대체String replaceAll(String regex, String rp)
역할 : regex를 rp로 대체
난수 클래스
//要导入java.util.Random
Random r=new Random();
int x,i;
for(i=1;i<=10;i++){
x=r.nextInt(10)+1;//默认从0开始,要获取从1-10的就要+1
System.out.println(x);
}
객체 지향 프로그래밍
개체 및 개체 참조의 메모리 관리
- 스택 (자동 관리 메커니즘)
- 스택 공간의 데이터는 시스템에서 자동으로 관리합니다. 즉, 함수가 호출되면 데이터 공간이 자동으로 생성되고 함수가 실행되면 데이터 공간이 자동으로 해제됩니다.
- 함수에 정의 된 모든 변수는 기본 유형이든 참조 유형이든 스택 공간에 저장됩니다.
- 힙 (수동 관리 메커니즘)
- 주문형 할당 또는 릴리스 실현
- 모든 개체는 힙 공간에 저장됩니다.
- 건설자
- 클래스와 동일한 이름, 반환 값 유형을 정의 할 필요가 없으며 반환 문이 없습니다. 반환 값이 없어도 void로 선언 할 수 없습니다.
- new를 사용하여 객체를 인스턴스화 할 때 시스템은 주어진
매개 변수 목록 에 따라 해당 생성자를 호출합니다. 이것은 생성자 오버로드입니다.
- 구조 코드 블록
- 역할 : 모든 개체의 통합 초기화
- 풍모:
对象一建立就执行并且优于构造函数执行
class Person {
private String name;
private int age;
{ age=15; }//构造代码块
Person() {
System.out.println("A:name="+name+",age="+age);}
Person(String n) {
name=n;
System.out.println("B:name="+name+",age="+age);
}
}
개체 파괴
- 지속적인 결승
- 상수 참조는 변경할 수 없습니다. 즉, 변경할 수없는 객체를 가리 키지 만 뾰족한 객체의 내용은 수정할 수 있습니다.
- 문자열 또는 배열 인 경우 참조는 힙에 있어야하며 최종 데이터를 가리켜 야합니다.
- a = b는 a와 b가 가리키는 객체입니다.
- == 주소가 동일한 지 확인
- a.equals (b) 내용이 동일한 지 확인
- 객체 배열
- new String [10]은 String 클래스 객체 (그러나 배열 객체)를 생성하지 않으므로 String 생성자가 호출되지 않습니다.
- sa [0]은 문자열 객체가 아닌 문자열 참조이며, sa [0]이 가리키는 것은 문자열 객체입니다.
상속하다
- 슈퍼 클래스의 개인 멤버 용이지만 사용할 수 없습니다.
- 객체를 생성 할 때 클래스와 수퍼 클래스의 생성자는 자동으로 호출
되며 호출 순서는 파생 순서와 동일합니다. - 슈퍼 클래스가 비공개가 아닌 경우
无参构造函数
하위 클래스自动调用
, 슈퍼 클래스가有参构造函数
인 경우 하위 클래스 생성자必须显式调用超类的构造函数
, 그렇지 않으면 컴파일 오류
싱글 톤 모드
class Student{
String name;
int age;
private Student(){}
public static Student creat(){//一定是static这样可以通过类名调用
Student a=new Student();//在方法中new
return a;
}
}
Student st=Student.creat();
System.out.println(st.age);
다형성
- 의미 : 다종
- 오버로딩 (정적 바인딩은 컴파일 타임에 결정됨) 동일한 객체와 동일한 메서드에 다른 매개 변수가 있음
- 개 1. 냄새 맡기 (소유자의 냄새 q); 개 1. 냄새 맡기 (뼈 냄새 q); ……
- 주의
重载传参
, 데이터의 기본 유형 인 경우 강제로 큰 데이터로 변환 할 수 있지만 작은 데이터는 큰 데이터로 변환 할 수 없습니다.
- 다른 개체의 동일한 동작을 다시 작성 (런타임에 동적 바인딩 결정)하는 것은 상당히 다릅니다.
- Dog d = new Tibetan Mastiff () / new Husky (); d. Bite (); // Rewrite이 메서드를 다른 새 객체에 다시 작성하여이 메서드를 호출하는 것은 다릅니다.이 메서드는 익스텐트의 부모 클래스입니다.
保证同名同参同返回类型权限不能缩小
- 클래스가 하위 클래스를 파생하는 것을 금지하려면 클래스를 설정하십시오.
为final
- 하위 클래스가 작업을 재정의하는 것을 방지하려면 작업을 다음과 같이 설정할 수 있습니다.
final或者static
- 재정의를 원하지 않는 메서드는 다음을 수행 할 수 있습니다.
final/static/private
// 클래스는 개인적으로 수정되지 않습니다.
- Dog d = new Tibetan Mastiff () / new Husky (); d. Bite (); // Rewrite이 메서드를 다른 새 객체에 다시 작성하여이 메서드를 호출하는 것은 다릅니다.이 메서드는 익스텐트의 부모 클래스입니다.
추상 클래스 및 인터페이스
- 추상 클래스 : 아버지와 아들 간의 계약 체결
- 추상은 생성자를 수정할 수 없습니다
- 초록은 static final과 함께 사용할 수 없습니다.
- 하위 클래스는 추상 클래스를 재정의해야합니다.
- 인터페이스 : 임의의 클래스 간의 계약 설정