对象
- this的用法:
this指向调用调用对象本身的引用名,谁调用指向谁。
当使用静态的变量时需要用类名来调用函数中的静态变量。赋值时this可以代替类名接受参数的传递。
import java.util.*;
public class TestWatch{
public static void main(String[] args){
//使用秒表类
StopWatch sort = new StopWatch();
//使用Date类
Date current = new Date();
//使用随机类
Random random = new Random();
//初始开始时间
sort.start(current.getTime());
System.out.println(sort.getStartTime());
//开始排序
int[] num = new int[100000];
for(int i = 0;i < 100000;i++){
num[i] = random.nextInt(10000);
}
Arrays.sort(num);
for(int i = 0;i < 100;i++){
System.out.print(num[i] + "\t");
}
//初始结束时间
sort.stop(current.getTime());
System.out.println(sort.getEndTime());
System.out.println(sort.getElapsedTime());
}
}
建立秒表类:
public class StopWatch{
//声明变量
private double startTime ;
private double endTime ;
void start(double currentTime){
this.startTime = currentTime;
}
void stop(double currentTime){
this.endTime = currentTime;
}
double getElapsedTime(){
double elapsedTime = endTime - startTime;
return elapsedTime;
}
double getStartTime(){
return startTime;
}
double getEndTime(){
return endTime;
}
}
面向对象的思考
- 类抽象是将类的实现和使用分离。使用者不知道类是如何实现的,实现的细节经过封装隐藏起来叫做类的封装。
this可以调用同名的构造函数必须放在第一位。例如
public List(int age ,String name){
this(age);**
类的关系
- 关联
二元关系:用来描述两个类之间的活动。 - 聚集:是关联的一种特殊形式用来表示两个对象之间的从属关系。如果一个对象只归属于一个类那么它和聚集对象的关系称为组合。所有者成为聚集对相,从属对象被称为被聚集对象。例如名字每个学生只有一个和学生之间为组合关系,而地址可以对应很多学生所以是聚集关系。
基本数值类型当做对象
- 将基本数据类型并入对象或者包装成对象:
int : Integer
double : Double
char : Character - java中包含了Boolean,Character,Double,Float,Byte,Short,Integer,Long.等包装类。
全部打包在java.lang中 - 构造包装类:既可以用基本数值类型也可以用字符串构造。
包装类将基本数值包装为对象
new Double(5.0);
new Double("5.0");
- MAX_VALUE MIN_VALUE
前面加类名.:Integer.MAX_VALUE 表明int类型的最大值。 - typeValue() : 表明将对象的对应类型值返回
new Double(12.4).intValue() = 12; - compareTo():比较两个数值大小。
- valueOf(String s);建立一个对象并且赋值字符串的值。
Double doubleObject = Double.valueOf(“12.4”); - 将数值字符串转换为基本数字类型的数,一般定义了两种:
一种为止直接转换为10进制的:
Integer.parseInt(“15”) = 15;
另外一种为转换制定进制类型成10进制的
Integer.parseInt(“12”,8):将8进制的12转换为10进制的10。 - 将10进制转换为16进制可以使用String.format()函数。
String.format(“%x”,26) returns 14
x代表进行转换的数值为16进制
基本类型和包装类型之间的切换
上面讲到了基本类型值可以通过包装类转换成为对象,对象可以转换为基本类型值。
- 装箱:基本数值类型转换为包装类对象成为装箱。
- 开箱:包装类对象转换为基本数值成为开箱。java允许自动转换。
基本类型准还简化版本:
Integer intObject = new Integer(2);
Integer intObject = 2;
Integer[] intArray = {1,2,3};
System.out.println(intArray[0] + intArray[1] + intArray[2]);
上面第三行将123自动装箱成对象,第四行中将箱中的对象自动开箱。转换为数字。
BigInteger和BigDecimal类
用于表示任意大小的精度的整数或者十进制数。
两个类处于java.math包中,使用BigInteger的对象没有大小限制,可以使用new BigInteger(String)来创建对象,使用add,substract,multipe,divide,remainder来完成运算。使用compareTo()来比较大小。
//创建对象2,注意必须是字符串形式
BigInteger a = new BigInteger("2");
BigInteger b = new BigInteger("3");
BigInteger c = a.multiply(b);
BigDecimal c = a.divide(b,20,BigDecimal.ROUND_UP);
divide如果没有全部除尽则会抛出异常。可以使用重载的函数进行精度限制:divide(BigDecimal d,int scale,int roundingMode);上面最后一个代码表明小数点后的精度。然后是四舍五入。
String类
- 创建字符串对象:
String newString = new String(stringliteral);参数stringliteral是一个括在双引号内的字符序列例如
String message = new String(“Welcome to java”);或者是
String message = “Welcome to java”;
另外可以用字符数组创建字符串对象
char[] charArray = {‘a’ , ‘b’ , ‘c’ , ‘d’ , ‘e’};
String message = new String(charArray); - 不可变字符串与限定字符串
不可变字符串:字符串一旦创建便不能修改。
限定字符串:java为了节约内存对相同字符序列的字符串使用同一个对>象,这样的字符串称之为限定字符串。只要不使用new新建对象所有指> 向限定字符串的引用都指向同一个对象, - 字符串的替换使用: .replace(‘a’,’b’)方法,把所有的a换成b。
- 依照模式匹配、替换、分隔
正则表达式:描述用于匹配一个字符串集的模式。可以通过制定某个模式来匹配替换和分隔一个字符串。
matches方法:1.和equals相似
2.表示模式匹配”Java is fun“.matches(“Java.“) * . * **表示Java后面可以跟很多个字符,但是都与此模式匹配。
\d{2}:\\d表示单个数字位,2表示三个数字位。
“[+#]” 表示
匹配所有含有+,#,符号的 模式。 - 字符串和数组之间的转换
char[] chars = “Java”.toCharArray();
“CS3720”.getChars(2,6,dst,4);
从第3位开始复制到字符数组dst从第4位之前开始 - 格式化字符串 :利用format方法
- -修改字符串 有StringBulider 和StringBuffer类中的append,insert,delete,reverse,replcae,setchatAt()各类方法。
继承和多态
super关键字
- 子类中只能继承父类中可访问的数据域和方法,对于私有的数据域和方法可以通过在父类中定义公共的访问器和修改器来进行访问和修改。
- super
- 的作用
1.调用父类的构造方法。 - 父类的构造方法不被子类继承,只能使用super。
super()或者是super(参数)必须出现在子类构造方法的第一行!!! - 构造链:构造一个对象时子类会调用沿着继承链的所有构造方法。从上到下依次调用。
2.调用父类的方法:
super.方法名(参数名); - 重写方法有时也要用到super函数。
注意:非静态方法必须是可以访问时才能被重写,因为私有方法不可以继承,子类中的方法和父类中的方法没有关系。静态方法可以被继承但是不能被覆盖可以通过父类名.静态方法名调用隐藏的静态方法。*