Java--常用类
1、方法中参数传递:值传递
基本数类型:具体的实际值
引用数据类型:对象的地址值
2、继承:
关键字:extends
单继承
继承父类的非私有成员
多重继承
2、权限的修饰符:
private 只能在当前类的内部访问 default 包访问权限
protected 子类访问权限
public 所有的地方都可以
注意:
1、default不建议使用。
2、这个四个权限是用来修饰类的成员的。
3、public和default还可以修饰外部类。
3、方法的覆写(覆盖、重写、override)
两同、两小、一大
项目 | 方法重写 | 方法的重载 |
---|---|---|
发生地方 | 子父类中 | 同一个类中 |
方法名 | 相同 | 相同同 |
参数列表 | 相同 | 不同 |
返回值类型 | 子类小于等于父类 | 无要求 |
抛出的异常 | 子类小于等于父类 | 无要求 |
访问权限 | 子类大于等于父类 | 无要求 |
final关键字:修饰类、变量、方法
修饰类:类不能有子类
修饰变量:成为常量 只能被赋值一次
修饰方法:方法在子类不能被重写。
抽象类:用abstract修饰的类
1、不能直接创建抽象类的对象,只能通过抽象类的非抽象子类来创建对象。
2、抽象类可以放普通类所有成员,另外还可以有抽象方法。
3、抽象方法:用abstract修饰,只有方法声明,没有方法体(没有那对大括号)
4、抽象类可以有抽象方法,也可以没有。但是抽象方法必须放在抽象类中。
5、子类继承抽象类,必须全部实现抽象类的抽象方法,如果没有,则子类也要标记为抽象类。
多态:编译时类和运行时类型不一致 A a = new B();
编译能否通过,看编译时类型。
运行时的具体结果,看运行时类型。
常用类
一、Object类
Java中,任何的类都有一个父类!!!如果一个类没有明确的去继承某个类,则这个类一定是继承Object。 Object类就是一个上帝类! 任何类都是间接或直接的继承自Object类。
getClass()
今天不细讲。到讲反射的时候再讲。
返回值类型 Class
xxx.class 加载到内存中也是对象! Java中一切皆对象!
xxx.class是哪个类的对象?是Class的对象。
所以:Class是所有的class对象对应的类。
hashCode()
返回的是这个对象的哈希值。默认是代表的这个对象的内存地址。
在实际使用的时候,我们会经常去覆写这个方法,根据自己的需求,来返回相应的值。
System.identityHashCode(a); //返回的某个对象的原始的hashCode值,即:这个对象的内存地址。
toString()
返回一个字符串!Objcect默认返回的是对象的:类名@hash值。一般情况是返回由属性的值组成的字符串。
当直接输出一个对象的时候,则相当于调用了这个对象的toString()方法。
equals(Object obj)
判断两个对象的内容是否相等!Object的默认是判断是两个对象是否是同一个对象。
== 引用数据类型判断是地址值。判断是两个对象是否为同一个对象
equals: 判断是两个对象的内容是否相同。
//如果传入的是null,则一定会返回false。 调用任何对象的方法,最好做一个非null的判断,防止出现空指针异常。
if(obj == null){
return false;
}
if(!(obj instanceof User)){
return false;
}
//用下面的替换掉
if(obj == null || !(obj instanceof User)){
return false;
}
二、包装类
打包(装箱):
把基本数据类型,包装成包装类对象的过程,称之为打包.
Integer i1 = new Integer(10); //把整型10包装了对象 打包(装箱)
拆包(拆箱):
把包装类型的对象,转化成基本数据类型,称之为拆包
int i = i1.intValue(); //拆包
//常用的静态方法:parseXxx
int i2 = Integer.parseInt("12345");
System.out.println(i2);
//把某个进制的形式的字符串,转换成10进制的整数
int i3 = Integer.parseInt("78", 16);
System.out.println(i3);
// toXxxString 把指定的int数,转换成指定进制的字符串
System.out.println(Integer.toBinaryString(7));
System.out.println(Integer.toHexString(127)); //
Integer i5 = Integer.valueOf("10");
System.out.println(i5);
基本数据类型 | 包装类型 |
---|---|
int | Integer |
char | Character |
byte | Byte |
short | Short |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
Integer i6 = new Integer(1);
Integer i7 = 1; //从jdk1.5新增的功能:自动打包(自动装箱) 基本数据类型直接赋值给包装类型
int i8 = i6; //自动拆包(自动拆箱) 包装类型直接赋值给基本数据类型
三、String相关类
3.1、String类
1、final修饰,不能有子类
2、不可变类!将来String对象都是不可变的!
(包装类也是不可变类) Intent i = new Integer(2);
i = new Integer(3);
1、 使用new关键字
String s1 = new String(“ab”);
2、 使用字符串常量直接赋值
String s2 = “abc”;
3、 使用”+”运算符进行字符串连接
String s3 = “abc” + “d”;
String s4 = s3 + 5; //abcd5
String s0 = "ab";
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2);
String s3 = "abc"; //直接指定
String s4 = s0 + "c"; //字符串串联
String s5 = "ab" + "c";
System.out.println(s3 == s2);
System.out.println(s3 == s4);
System.out.println(s3 == s5);
总结:
1、如果有new则最终指向堆中的对象
2、如果在计算的过程中有变量参与,也是指向堆中的。
3、如果只有常量参与,则堆中不会有对象产生,最终指向常量池中的对象。
4、在常量池中只要内容一样,则一定是同一个对象
3.2、StringBuffer和StringBuilder
他们两个的功能完全相同!!!
StringBuffer是线程安全的在多线程的时候使用StringBuffer。 安全但是效率低
StringBuilder是线程不安全的,在单线程操作的时候优先选择StringBuilder。不安全但是效率高
四、时间相关类
Date
时间类,描述一个具体的时间点。
SimpleDateFormat
格式化时间
Calendar
日历类
五、Math类
六、Random类
七、System和Runtime类
7.1 System
currentTimeMillis()
返回以毫秒为单位的当前时间。
arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
identityHashCode(Object x)
返回给定对象的哈希码,该代码与默认的方法 hashCode() 返回的代码一样,无论给定对象的类是否重写 hashCode()。
八、正则表达式
九、枚举类
类一旦创建,则这个类的个数就确定了!
public class 类名{
}
public enum 枚举类名{
}
特点:
1、枚举类也是一个类,只是他提前限制了这个类的对象的个数!!!
2、枚举类,必须在类的首行声明这个类都有哪些对象
3、枚举类的构造方法一定是私有!如果枚举类的构造方法没有写权限修饰,则这个构造方法默认也是private
4、枚举类可以有抽象类有的任何成员。在定义每个对象的时候,需要分别对抽象方法进行实现。