前言:
JAVA程式設計就是定義類的過程,
Java
一、Object 類中的toString()方法
`toString()`作為基礎類庫中的方法,程式會預設使用,其結果就是:
把字元串的直接列印,數字的要轉化成字元再列印,而對象,則直接列印該對象的hash碼(類似
@15db9742
這樣的東東),它的值大概就是等于
getClass().getName()+’@’+Integer.toHexString(hashCode())

為什麼要重寫toString()方法?
簡單一句話就是重寫
toString()
可以了解為是對對象在列印輸出時候的一種格式化。這樣做符合業務邏輯,顯示結果人性化。
object類裡的
toString
隻是
hash碼 這玩意是給機器看的,平凡的人看不懂
總結:
二、Object類中的equals()方法與==對比說明
equals() 方法用于将字元串與指定的對象比較
1、== 如果作用于基本資料類型,則比較的是值是否相等;
如果作用于引用類型,則比較的是變量所指向的對象的位址
2、equals 對于非String、Date類型比較的是引用類型的變量所指向的對象的位址
但對于String、Date類型,在其類中重寫了equals(),是以比較的是值
3、 Object類型相等判斷為什麼重寫equals()和hashcode()
equals()方法是比較兩個對象的記憶體位址是否相等,如果不重寫,顯然兩個對象由于不同存儲位址是以是不相等的
4、 重寫equals()為什麼一定要重寫hashcode()
如果兩個對象判斷相等隻重寫了euqals()方法,而沒有重寫hashcode()方法,雖然p1.equals(p2)結果是true,但執行p1.hashCode()==p2.hashCode()結果卻是false,這與“兩個對象相等,其hashcode必然相等”沖突,是以重寫了equals()必然需要重寫hashcode()
hashcode()判斷是equals()判斷的先決條件,是以對象重寫了equals()需要重寫hashcode()
package nio;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class ListTest {
public static void main(String[] args) {
Person p1 = new Person(10, "張三");
Person p2 = new Person(10, "張三");
System.out.println(p1.equals(p2));
System.out.println(p1.hashCode()==p2.hashCode());
}
}
class Person {
int age;
String name;
public Person(int age, String name) {
super();
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) { //重寫equals方法
boolean flag=false;
if(this==obj) {
flag=true;
}
if(null != obj) {
Person other=(Person) obj; //對象轉化為person類型對象
if((age==other.age) && (name==other.name)){
flag=true;
}
}
return flag;
}
@Override
public int hashCode() {
final int prime=31;
int result=1;
result=prime*result+age;
result=prime*result+((name==null)?0:name.hashCode());
return result;
}
}
//如果不重寫equals方法則 System.out.println(p1.equals(p2))傳回false
//如果不重寫hashcode方法則System.out.println(p1.hashCode()==p2.hashCode())傳回false
三、Math類的應用
Math.PI
記錄的圓周率
Math.E
記錄e的常量
Math中還有一些類似的常量,都是一些工程數學常用量。
Math.abs
求絕對值
Math.sin
正弦函數 Math.asin 反正弦函數
Math.cos
餘弦函數 Math.acos 反餘弦函數
Math.tan
正切函數 Math.atan 反正切函數 Math.atan2 商的反正切函數
Math.toDegrees
弧度轉化為角度 Math.toRadians 角度轉化為弧度
Math.ceil
得到不小于某數的最大整數
Math.floor
得到不大于某數的最大整數
Math.IEEEremainder
求餘
Math.max
求兩數中最大
Math.min
求兩數中最小
Math.sqrt
求開方
Math.pow
求某數的任意次方, 抛出ArithmeticException處理溢出異常
Math.exp
求e的任意次方
Math.log10
以10為底的對數
Math.log
自然對數
Math.rint
求距離某數最近的整數(可能比某數大,也可能比它小)
Math.round
同上,傳回int型或者long型(上一個函數傳回double型)
Math.random
傳回0,1之間的一個随機數
四、Random類
Random類中實作的随機算法是僞随機,也就是有規則的随機。在進行随機時,随機算法的起源數字稱為種子數(seed),在種子數的基礎上進行一定的變換,進而産生需要的随機數字。
相同種子數的Random對象,相同次數生成的随機數字是完全相同的。也就是說,兩個種子數相同的Random對象,第一次生成的随機數字完全相同,第二次生成的随機數字也完全相同。這點在生成多個随機數字時需要特别注意。
生成随機數
Random r = new Random();
int number = r.nextInt();
下面介紹一下Random類的使用,以及如何生成指定區間的随機數組以及實作程式中要求的幾率。示例如下;
package Seventh;
import java.util.Random;
public class Randemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Random r = new Random();
int n5 = r.nextInt(100);
String ran = "";
if (n5 < 55) { //55個數字的區間,55%的幾率
ran = "55%";
} else if (n5 < 95) {//[55,95),40個數字的區間,40%的幾率
ran = "40%";
} else {
ran = "5%"; //剩餘幾率,你懂得!
}
System.out.println(ran);
}
}
五、一些常用的方法
轉小寫
//轉小寫
public static String first2low(String str){
String s = "";
s = str.substring(0, 1).toLowerCase() + str.substring(1);
return s;
}
轉大寫
// 轉大寫
public static String first2upper(String str){
String s = "";
s = str.substring(0, 1).toUpperCase() + str.substring(1);
return s;
}
字元轉List
// 字元轉List
public static List<String> str2list(String s)
throws IOException {
List list = new ArrayList();
if ((s != null) && (!s.equals(""))){
StringReader fr = new StringReader(s);
BufferedReader br = new BufferedReader(fr);
String aline = "";
while ((aline = br.readLine()) != null){
list.add(aline);
}
}
return list;
}
格式化日期
// 格式化日期
public static Date formatDate(String s){
Date d = null;
try {
d = dateFormat.parse(s);
} catch (Exception localException){
}
return d;
}
格式化日期
// 格式化日期
public static Date formatDate(String s, String format){
Date d = null;
try {
SimpleDateFormat dFormat = new SimpleDateFormat(format);
d = dFormat.parse(s);
} catch (Exception localException){
}
return d;
}
格式化日期
// 格式化日期
public static String formatTime(String format, Object v){
if (v == null)
return null;
if (v.equals(""))
return "";
SimpleDateFormat df = new SimpleDateFormat(format);
return df.format(v);
}
格式化日期 轉為yyyy-MM-dd HH:mm:ss 格式
// 格式化日期 轉為yyyy-MM-dd HH:mm:ss 格式
public static String formatLongDate(Object v){
if ((v == null) || (v.equals("")))
return "";
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return df.format(v);
}
格式化日期 轉為yyyy-MM-dd 格式
// 格式化日期 轉為yyyy-MM-dd 格式
public static String formatShortDate(Object v){
if (v == null)
return null;
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
return df.format(v);
}
UTF-8解碼
// UTF-8解碼
public static String decode(String s){
String ret = s;
try {
ret = URLDecoder.decode(s.trim(), "UTF-8");
} catch (Exception localException){
}
return ret;
}
UTF-8編碼
// UTF-8編碼
public static String encode(String s){
String ret = s;
try {
ret = URLEncoder.encode(s.trim(), "UTF-8");
} catch (Exception localException){
}
return ret;
}