标签:
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();
编译能否通过,看编译时类型。
运行时的具体结果,看运行时类型。
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; //自动拆包(自动拆箱) 包装类型直接赋值给基本数据类型
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、在常量池中只要内容一样,则一定是同一个对象
他们两个的功能完全相同!!!
StringBuffer是线程安全的在多线程的时候使用StringBuffer。 安全但是效率低
StringBuilder是线程不安全的,在单线程操作的时候优先选择StringBuilder。不安全但是效率高
Date
时间类,描述一个具体的时间点。
SimpleDateFormat
格式化时间
Calendar
日历类
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、枚举类可以有抽象类有的任何成员。在定义每个对象的时候,需要分别对抽象方法进行实现。
标签:
原文地址:http://www.cnblogs.com/xmcx1995/p/5753135.html