Object
- 超类、基类,所有类的直接或间接父类,位于继承树的最顶层
- 任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承
- Object类中所定义的方法,是所有对象都具备的方法
- Object类型可以存储任何对象
- 作为参数,可接受任何对象
- 作为返回值,可返回任何对象
方法
getClass()
- public final Class<?> getClass(){}
- 返回引用中存储的实际对象类型
- 应用:通常用于判断两个引用中实际存储对象类型是否一致
Class class1 = s1.getClass();
Class class2 = s2.getClass();
hashCode()
- public int hashCode(){}
- 返回该对象的哈希码值
- 哈希值根据对象的地址或字符串或数字使用hash算法计算出来的int类型的值
- 一般情况下相同对象返回相同哈希码
s1.hashCode();
s2.hashCode();
Student s3 = s1;
toSring()
- public String toSring(){}
- 返回该对象的字符串表示(表现形式)
- 可以根据程序需求覆盖该方法,如:展示对象各个属性值
equals()
- public boolean equals(Object obj){}
- 默认实现为(this == obj), 比较两个对象地址是否相同
- 可进行覆盖,比较两个对象的内容是否相同
sout(s1.equals(s2));
Student s4 = new Strudent("小明", 17);
Student s5 = new Strudent("小明", 17);
sout(s4.equals(s5));
@override
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(obj == null){
return false;
}
if(obj instanceof Student){
Student s = (Student)obj;
if(this.name.equals(s.getName()) && this.age == s.getAge()){
return true;
}
}
return false;
}
finalize()
- 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列
- 拉圾对象:没有有效引用指向此对象时,为垃圾对象
- 垃圾回收:由gc销毁垃圾对象,释放数据存储空间
- 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象
- 手动回收机制:使用System.gc();通知JVM执行垃圾回收,但不一定回收
@Override
protected void finalize() throws Throwable{
sout(this.name + "对象被回收了");
}
psvm(String[] args){
Student s1 = new Student("aaa", 29);
new Student("bbb", 30);
System.gc();
sout("回收垃圾");
}~
包装类
基本数据类型 | 引用数据类型 |
---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
拆箱装箱
Integer integer1 = new Integer(num1);
Integer integer2 = Integer.valueOf(num1);
Integer integer3 = new Integer(100);
int num2 = integer3.intValue();
int age = 30;
Integer integer4 = age;
int age2 = integer4;
int n1 = 100;
String s1 = n1 + "";
String s2 = Integer.toString(n1);
String s2 = Integer.toString(n1, x);
String str = "150";
int n2 = Integer.parseInt(str);
String str2 = "true";
boolean b1 = Boolean.parseBoolean(str2);
}~
整数缓冲区
- Java预先创建了256个常用的证书包装类型对象
- 在实际应用当中,对已创建的对象进行复用
psvm(String[] args){
Integer integer1 = new Integer(100);
Integer integer2 = new Integer(100);
sout(integer1 == integer2);
Integer integer3 = new Integer(100);
Integer integer4 = new Integer(100);
sout(integer3 == integer4);
Integer integer5 = new Integer(200);
Integer integer6 = new Integer(200);
sout(integer5 == integer6);
}~
字符串
String
- 字符串是常量,创建之后不可改变
- 字符串字面值存储在字符串池中,可以共享
- String s = “Hello”;产生一个对象,字符串池中存储
- String s = new String(“Hello”); 产生两个对象,堆、池各一个
常用方法
String content = "java是最好的语言, java no1";
sout(content.length());
sout(content.charAt(content.length() - 1));
sout(content.contains("java"));
sout(content.toCharArray());
sout(content.indexOf"java"));
sout(content.indexOf("java", 4));
sout(content.lastIndexOf("java"));
String ct = " hello world ";
sout(ct.trim());
sout(ct.toUpperCase());
sout(ct.toLowerCase());
sout(ct.endWith("world"));
sout(ct.startWith("hello"))
sout(content.replace("java", "php"));
String say = "java is the best language";
String[] arr = arr.say.split(" ");
sout(arr.length);
for(String string : arr){
sout(string);
}
String s1 = "hello";
String s2 = "HELLO";
sout(s1.equalsIgnoreCase(s2));
StringBuffer和StringBuilder
- StringBuffer : 可变长字符串,运行效率慢、线程安全
- StringBuilder : 可边长字符串、运行快、线程不安全
- 效率都比String高且节省内存~
BigDecimal
- 位置 java.math 包中
- 作用 精确计算浮点数
- 创建方式 BigDecimal bd = new BigDecimal(“1.0”);
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.9");
BigDecimal r1 = bd1.subtract(bd2);
sout(r1);
BigDecimal r2 = bd1.add(bd2);
BigDecimal r3 = bd1.multiply(bd2);
BigDecimal r4 = new BigDecimal("1.4").subtract(new BigDecimal("0.5")).divide(new BigDecimal("0.9"), x, BigDecimal.ROUND_HALF_UP);
日期
Date
- Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar类中的方法所取代
- 时间单位:1s = 1,000ms = 1,000,000 μs = 1,000,000,000 = ns
psvm(String[] args){
Date date1 = new Date();
sout(date1.toString());
sout(date1.toLocaleString());
Date date2 = new Date(date1.getTime() - (60*60*24*1000));
sout(date2.toLocaleString());
boolean b1 = date.after(date2);
sout(b1);
boolean b2 = date1.before(date2);
sout(b2);
int d = date1.compareTo(date1);
sout(d);
boolean b3 = date1.equals(date2);
sout(b3);
}~
Calender
- Calendar提供了获取或设置各种日历字段的方法
- 构造方法 protected Calendar(); 由于是protected 所以无法直接创建
- 其他方法
方法名 | 说明 |
---|
static Calendar getInstance() | 使用默认时区和区域获取日历 |
void set(int year, int month, int date, int hourofday, int minute, int second) | 设置日历的年、月、日、时、分、秒 |
int get(int field) | 返回给定日历字段的值。字段比如年、月、日 |
void setTime(Date date) | 用给定的date设置此日历时间 |
Date getTime() | 返回一个date表示此日历的时间 |
void add(int field, int amount) | 按照日历的规则,给指定字段添加或减少时间量 |
long getTimeInMilles() | 毫秒为单位返回该日历的时间值 |
psvm(String[] args){
Calendar calendar = Calendar.getInstance();
sout(calendar.getTime().toLocaleString());
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int month = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
Calendar calendar2 = Calendar.getInstance();
calendar2.set(Calendar.DAY_OF_MONTH, x);
calendar2.add(Calendar.HOUR, x);
int max = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);
int min = calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);
}~
SimpleDateFormat
- SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类
- 进行格式化(日期→文本)、解析(文本→日期
- 常用的时间模式字母
psvm(String[] args){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH-mm-ss");
Date date = new Date();
String str = sdf.format(date);
sout(str);
Date date2 = sdf.parse("1948/03/12");
sout(date2);
}
System
psvm(String[] args){
int[] arr = {20, 18, 39, 3};
int[] dest = new int [4];
System.arraycopy(src, srcPos, dest, destPos, length);
sout(arr, 4, dest, 4, 4)
}