内部类概念:在一个类的内部在定义一个完整的类。
特点:
Outer outer = new Outer();
Inner inner = outer.new Inner();
或者
Inner inner = new Outer().new Inner();
Outer.this.name
Outer.Inner inner = new Outer.Inner();
Outer.Inner.show();
public interface Usb {
void service();
}
public class Mouse implements Usb {
@Override
public void service() {
System.out.println("电脑连接成功,鼠标开始运作");
}
}
public class TestUsb {
public static void main(String[] args) {
// 创建接口类型的变量
// Usb usb = new Mouse();
// usb.service();
// 局部内部类
// class Fan implements Usb{
//
// @Override
// public void service() {
// System.out.println("连接电脑成功,风扇开始工作了");
// }
// }
// // 使用局部内创建对象
// Usb usb = new Fan();
// usb.service();
// 使用匿名内部类优化,(相当于创建了一个局部内部类)
Usb usb = new Usb() {
@Override
public void service() {
System.out.println("连接电脑成功,风扇开始工作了");
}
};
usb.service();
}
}
public final Class<?> getClass()
Returns the runtime class of this Object.
public int hashCode()
public String toString()
public boolean equals(Object obj)
equals方法重写步骤
public boolean equals(Object obj){
// 判断两个对象引用是否是同一个对象
if(this == obj){
return true;
}
// 判断object是否为null
if(obj == null){
return false;
}
// 判断是否是同一个类型
// if(this.getClass() == obj.getClass()){
//
// }
// instanceof 判断对象是否是某种类型
if(obj.instanceof Student){
// 强制类型装换
Student s =(Student)obj;
// 比较属性
if(this.equals(s.getName()) && this.age==s.getAge()){
return true;
}
}
return false;
}
System.gc()
;通知JVM执行垃圾回收。int num1 = 18;
// 装箱
Integer integer1 = new Integer(num1);
Integer integer2 = new Integer(num1);
// 拆箱
Integer integer3 = new Integer(100);
int num2 = integer3.intValue();
以上方法是JDK1.5之后,之后提供了自动拆箱装箱
valueOf()
方法:实现包装类的转换。
int n1 = 125;
// 1 使用+号
String s1 = n1 + "";
// 2. 使用integer中的toString()方法
String s2 = Integer.toString(n1,16); // f
String str = "150";
// 使用Integer.parseInt(str);
int n2 = Integer.parseInt(str);
boolean
字符串形式转成基本类型。"true"
–>true
,"非true"
–>false
String str2 = "true";
boolean b1 = Boolean.parseBoolean(str2);
valueOf
的源码: public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
其中static final int low = -128;
,high
是127。
public int length()
:返回字符串长度public char charAt(int index)
:返回某个位置字符串public char[] contains(String str)
: 判断是否包含每个字符串public char[] toCharArray(String str)
:将字符串转换成数组public int indexOf(String str)
:查找str首次出现的下标,存在,则返回改下标,不存在,则返回-1。public int lastIndexOf(String str)
:查找字符串在当前字符串中最后一次出现的下标位置public String trim()
:去掉字符串前后的空格。public String toUpperCase()
:将小写转成大写。public boolean endWith(String str)
:判断字符串是否以str结尾。public String replace (char oldChar,char newChar)
:将旧字符串替换成为新字符串。public String[] split(String str)
:根据str做拆分。compare()
:比较大小。StringBuffer:可变长字符串,JDK1.0提供,运行效率慢、线程安全
StringBuilder:可变长字符串,JDK5.0提供,运行效率快、线程不安全。
append()
:追加方法insert()
:添加replace()
:替换delete()
:删除思考:以下程序输出多少
double d1 = 1.0;
double d2 = 0.9;
System.out.println(d1 - d2);
System.out.println((1.4 - 0.5 )/0.9);
结果为:
0.09999999999999998
0.9999999999999999
位置:java.math包中。
作用:精确计算浮点数。
创建方式:BigDecimal bd-new BigDecimal("1.0");
例子:
BigDecimal b1 = new BigDecimal("1.0");
BigDecimal b2 = new BigDecimal("0.9");
BigDecimal result = b1.subtract(b2);
System.out.println(result);
减法:subtract
加法:add
乘法:multiply
除法:divide
除不尽的时候会抛出异常。可以选择保留几位小数。和四舍五入
BigDecimal b3 = new BigDecimal("10").
divide(new BigDecimal("3"),3,BigDecimal.ROUND_HALF_UP);
Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar类中的方法所取代。
Date date1 = new Date();
System.out.println(date1);//Wed Jan 06 19:09:59 CST 2021
System.out.println(date1.toLocaleString());//2021-1-6 19:09:59
// 昨天的时间
Date date2 = new Date(date1.getTime()-(1000*60*60*24));
boolean b1 = date1.after(date2);
System.out.println(b1); //true
// 还有一个before方法
int b2 =date1.compareTo(date2);
System.out.println(b2); // 结果为1
// 反过来为-1,自己和自己比较为0。
Calendar提供了获取或设置各种日历字段的方法。
构造方法 protected Calendar():由于修饰符是protected,所以无法直接创建该对象。
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());
System.out.println(calendar.getTime().toLocaleString());
//结果为
Wed Jan 06 19:24:14 CST 2021
2021-1-6 19:24:14
// 获取时间信息
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int hour1 = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
//
2021
0
6
19
7
30
13
int max = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
int min = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);
//
31
1
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
// 创建Date
Date date = new Date();
String format = sdf.format(date);
System.out.println(format);
结果为:2021年01月06日 19:47:21
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");
Date parse = sdf2.parse("1999/05/20");
System.out.println(parse);
结果为:Thu May 20 00:00:00 CST 1999
System系统类,主要用于获取系统的属性数据和其他操作,构造方法私有的。