继承
子类能继承父类的非私有成员(成员变量,成员方法)
继承后对象的创建:子类的对象是由子类父类共同完成的
public class B extends A{
//A类称为父类(基类或超类)
//B类称为子类(派生类)
}
父类必须有无参数构造器,否则会报错,且子类调用构造器是会先调用父类无参构造器
api
public String toString() | 返回字符串内容 | |
public bollean equals(Object o) | 判断两个对象地址是否相等 | 重写快捷方式 eq |
protected Object clone() | 对象克隆 | 需要有标记接口(Cloneable)才能调 |
注:equals不常用,常重写
重写:
public boolean equals(Object o) {
//判断两个对象地址是否相等,相等直接返回true
if (this == o) return true;
// 判断o是null,返回false;判断两个比较的类型不一样,返回false(例如;s1.equals(new Pig ()))
if (o == null || getClass() != o.getClass()) return false;//getClass()为比较者
// 比较内容
student student = (student) o;//进行强转
return age == student.age && Objects.equals(name, student.name);
}
浅克隆:拷贝出来的新对象,与原来对象中的数据一模一样(引用类型拷贝的是地址)
public class clOne {
public static void main(String[] args) throws CloneNotSupportedException//需要加这个
{
User a1=new User(3,"aaa",new double[]{11,33,22});
User a2=(User) a1.clone();
System.out.println(a2.getId);
System.out.println(a1.getId);
System.out.println(a1.equals(a2));
System.out.println(a1.getScore());
System.out.println(a2.getScore());
//数组拷贝地址,其他为内容
}
}
class User implements Cloneable//需要这个
{
private int id;
private String name;
private double [] score;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public User(){
}
public User(int id, String name, double[] score){
this.id = id;
this.name = name;
this.score = score;
}
public int getId(){
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name) {
this.name = name;
}
public double[] getScore() {
return score;
}
public void setScore(double[] score) {
this.score = score;
}
}
深克隆
对象中的基本类型数据直接拷贝,字符串拷贝的还是地址,对象中其他对象会创建新对象
深克隆与浅克隆不同
@Override
protected Object clone() throws CloneNotSupportedException {
User a3=(User) super.clone();
a3.score= a3.score.clone();
return a3;
}
objects
public static bollean equals(Object a,Object b) | 先做非空判断,再比较 |
public static bollean isNull(Object obj) | 判断对象是否为null,不为返回true,反之 false |
public static bollean nonNull(Object obj) | 判断对象是否不为null,不为返回true,反之 false |
包装类:把基本类型数据包装成对象
int | Integer |
char | Character |
其他都为原来的首字母大写模式
Integer a1 = Integer.valueOf(11);
System.out.println(a1);
//自动装箱
Integer a2=13;
//自动拆箱
int a3=a2;
ArrayList<Integer>list=new ArrayList<>();
list.add(1);//自动装箱
list.add(2);//自动装箱
int aa=list.get(1);//自动拆箱
包装类其他操作
1.把基本数据类型转成字符串
//1.把基本类型转换成字符串
Integer a=23;
String r=a.toString();
System.out.println(r + 1);
String r1=a+"";
System.out.println(r1 + 1);
2.把字符串转为原来的数据类型
//把字符串转成数值本身的数据类型
String score="66";
//int ageI Integer.parseInt(score);
int ageI= Integer.valueOf(score);
System.out.println(ageI-6);
StringBuilder
构造器 | 说明 |
public StringBuilder() | 创建空白对象 |
public StringBuilder(String str) | 创建字符串内容可变的字符串对象 |
方法名称 | 说明 |
public StringBuilder append(任意类型) | 添加数据并返回对象本身 |
public StringBuilder reverse() | 将对象内容反转 |
public int length() | 返回对象长度 |
public StringBuilder toString() | 转为String |
注:StringBuilder支持链式编程.例:
s.append(66).append("mmmm").append(66.6)
String与StringBuilder的应用
1.因为使用String,每次会创建一个新对象,所以频繁的拼接,修改建议使用StringBuilder;
2.c操作少,或不需要操作用String
StringBuffer与StringBuilder
两者用法一样但StringBuilder线程不安全,StringBuffer线程安全。
StringJoiner:提供符号
构造器 | 说明 |
public StringJoiner(间隔符号) | 创建对象,并指定拼接时的间隔符号 |
public StringJoiner(间隔符号,开始符号,结束符号) | 创建对象,并指定拼接时的间隔符号,开始符号,结束符号 |