第10章:オブジェクト指向の思考
1.オブジェクト指向
1.プロセス指向のパラダイムは設計メソッドにあり、オブジェクト指向のパラダイムはデータとメソッドを結合することにあります。
2.クラスの抽象化とは、クラスの実現がクラスの使用から分離され、実現の詳細がカプセル化されてユーザーから隠されることを意味します。これは、クラスのカプセル化と呼ばれます。
2.クラス間の関係
クラス間の関係は、関連付け、集約、構成、および継承です。
1.関連付け:2つのクラス間のアクティビティを説明する一般的なバイナリ関係
2.集約は、学生と住所などの2つのオブジェクト間の属性関係を表す特殊な形式の関連付けです。1つのオブジェクトは、他の複数の集約オブジェクトが所有できます。
3.オブジェクトが集約されたオブジェクトに属している場合、そのオブジェクトと集約されたオブジェクトの関係は、組み合わせと呼ばれます。例:学生と名前
3.基本タイプをオブジェクトとして扱います
1.基本タイプ:int double char……
パッケージタイプ:整数二重文字……
各ラッパークラスには、オブジェクトを基本型の値に「変換」するためのintValue()、doubleValue()、およびその他のメソッドが含まれています。
基本的な型の値と数値を表す文字列を使用して、ラッパークラスを構築できます
compareTo()メソッドは、以下に対応する1、0、-1を返します。
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer i = new Integer(3);
Double d = new Double(3.5);
Double d2 = new Double("3.5");
Double d3 = new Double("1.5");
Double d4 = new Double("8.5");
System.out.println(i.intValue());//3
System.out.println(d.doubleValue());//3.5
System.out.println(d2.doubleValue());//3.5
System.out.println(Double.valueOf("6.5"));//6.5
System.out.println(d.compareTo(d2));//0
System.out.println(d.compareTo(d3));//1
System.out.println(d.compareTo(d4));//-1
}
文字列を2進数、8進数、10進数、16進数に変換します
//语法:
Integer i=Integer.parseInt(字符串,进制)//进制可以为2,8,10,16
int i2=Integer.parseInt("011", 2);
System.out.println(i2);//3
//转换为16进制的第二种方法
System.out.println(String.format("%x", 26));//1a
パッケージングクラスにはパラメータのない構造がないことに注意してください
2.ベーシックタイプとパッケージングタイプ間の自動変換
ベーシック->パッケージング(ボクシング)
パッケージング->ベーシック(ボックス化解除)
Integer x=new Integer(2);//等价于 Integer x=2 (自动装箱)
//但是:
Double d=3;//错误
Double d=3.0//正确
Four。BigIntegerおよびBigDecimalオブジェクト
1.BigIntegerクラスとBigDecimalクラスは、任意のサイズと精度の整数または10進数を表すことができます。
2.新しいBigInteger(文字列)によって作成されました
public static void main(String[] args) {
// TODO Auto-generated method stub
BigInteger bi = new BigInteger("1234567845678984327");
System.out.println(bi);//1234567845678984327
BigDecimal bd = new BigDecimal("3.14159265358979323846264338327950288");
System.out.println(bd);//3.14159265358979323846264338327950288
}
3.加算、減算、乗算、除算の残差を使用して、加算、減算、乗算、および除算の残差操作を実行します。
4.注:
結果を終了できない場合、BigDecimalは例外をスローします。オーバーロードされた除算を使用できます(BigDecimal d、小数点以下の桁数、除数)
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(fact(50));//返回50的阶乘结果
//608281864034267560872252163321295376887552831379210240000000000
}
public static BigInteger fact(long x) {
BigInteger sum=BigInteger.ONE;//BigInteger.ONE=1;
for(int i=1;i<x;i++) {
sum=sum.multiply(new BigInteger(i+""));//使用multiply做乘法
}
return sum;
}
Five.Stringクラス
Stringオブジェクトは不変です。文字列が作成されると、コンテンツを変更することはできません
。Stringクラスには、文字列を処理するための13の構築メソッドと複数のメソッドがあります。
char[] c= {
'j','a','v','a'};
String s=new String(c);
System.out.println(s);//java
String s1="welcome";//创建了一个对象,将Welcome放入了常量池中
String s2=new String("welcome");//新的对象 如果常量池中不存在welcome,则词语局创建了两个对象,分别是将Welcome放入常量池中,将new的对象放入堆中
String s3="welcome";//和s1指向同一个地址
System.out.println(s1==s2);//false
System.out.println(s1==s3);//true
文字列の一般的なメソッド:
String s="hello java";
System.out.println(s.replace('a', 'e'));//hello jeve
System.out.println(s.replaceFirst("l", "y"));//heylo java
System.out.println(s.replaceAll("l", "y"));//heyyo java
String[] list=s.split("o");
for(String i:list)
System.out.print(i+" ");//hell java
6.通常の表現
通常の表現:パターンを使用して文字列を照合、置換、分割します
文字列を文字配列に変換します。
String s="hello java";
char[] a=s.toCharArray();
for(char i:a)
System.out.print(i+" ");//h e l l o j a v a
上記のように、配列を文字列に変換します
通常、matches、replace、replaceAll、およびその他の方法を使用します。より包括的なBaidu用にプログラムすることをお勧めします。
7.StringBuilderおよびStringBufferクラス
1. StringBuilderクラスとStringBufferクラスに新しいコンテンツを追加、挿入、および追加できます。
2. StringBufferは、バッファーを同期的に変更し、StringBuilderが単一のタスクをより効率的に実行し、残りの2つはまったく同じであるため、複数のタスクの同時実行に適しています。
3. StringBuilderには、文字列を処理するための3つの構築メソッドと30を超えるメソッドがあります。
StringBuilder s=new StringBuilder();//创建一个容量为16的空字符串构造器
StringBuilder s2=new StringBuilder(20);//指定容量
StringBuilder s3=new StringBuilder("hello java");//指定字符串
System.out.println(s.capacity());//16
System.out.println(s2.capacity());//20
促す:
文字列を変更する必要がない場合は、文字列を使用します。文字列は共有文字列を最適化するためです。
コンピューターでは、文字列コンストラクターは文字配列であり、コンストラクターの容量は配列のサイズです。容量を超えると、容量2 *(既存の容量+ 1)の配列が作成されます。
容量が大きすぎる場合は、trimToSize()を使用して容量を実際のサイズに減らすことができます
次の例では、文字列とその反転が実際に等しいことがわかります。!!
StringBuilder s=new StringBuilder("java is fun");
System.out.println(s.reverse());//nuf si avaj
System.out.println(s.equals(s.reverse()));//true
その理由は、StringBuilderがequalsメソッドをオーバーライドせず、常に元のオブジェクトを指す
ためです。比較を行うには、toStringメソッドを追加する必要があります。
System.out.println(s.toString().equals(s.reverse().toString()));//false
StringBuilderの他のメソッドはあまり導入されず、将来頻繁に使用されます
[後の補足] -2020-03-06
1. Stringクラスの内容は変更されません
。StringBuilderは動的に文字列を作成でき、スレッドに安全でない
StringBufferは動的に文字列を作成できます。これはスレッドセーフです。
2.速度とメモリ消費の観点からの3つの比較
速度:StringBuilder> StringBuffer> String
メモリ:String> StringBuffer> StringBuilder
public static void main(String[] args) {
// TODO Auto-generated method stub
StringBuilder s = new StringBuilder();
long remain1 = Runtime.getRuntime().freeMemory();// 剩余内存
long begin = System.currentTimeMillis();
for (int i = 0; i < 5000; i++) {
s.append(i);
}
long end = System.currentTimeMillis();
long remain2 = Runtime.getRuntime().freeMemory();// 字符串拼接完成后剩余内存
System.out.println("使用毫秒数:" + (end - begin) + "\t使用内存:" + (remain1 - remain2));
//结果:StringBuilder:使用毫秒数:10 使用内存:1032240
//StringBuffer:使用毫秒数:12 使用内存:1032240
//String:使用毫秒数:4196 使用内存:-114659128
}
3.シナリオを使用します。
- 少量のデータは文字列を変更しません-文字列
- シングルスレッドの文字列バッファで大量のデータを操作する-StringBuilder
- マルチスレッド操作で大量のデータを操作するstringbuffer-StringBuffer
8.まとめ
この章の学習を通じて、オブジェクト指向の特性とクラスの4つの関係について学び、基本タイプとパッケージタイプの相互変換、自動ボックス化とボックス化解除、BigIntegerクラスとBigDecimalクラスの基本的な使用法を学びました。 Stringクラスの文字列の処理と保存のメカニズムに到達した後、StringBuilderとStringBufferの相違点と類似点を学びました。これは文字列のフルサービスと言え、それぞれに長所と短所があります。正規式については、この章でのみ説明します。非常に便利な機能ですが、能力が限られており、説明が十分に網羅されていないのではないかと心配です。バイドゥのこの側面を大量にプログラムすることができます。
いい加減にして!第11章もっとなるために...