java核心技术读书笔记_Java核心技术 读书笔记

## 大数值

import java.math.*;

import java.util.*;

BigInteger c = BigInteger.valueOf(100).divide(BigInteger.valueOf(10)).multiply...add...substract...;

# 第5章 继承

## 5.1 类、超类和子类

### 5.1.1 继承层次

### 5.1.2 多态

可以将子类对象赋给超类变量

### 5.1.3 动态绑定

执行f函数:

Step1. 编译器列出所有函数名为f的本类函数和超类public函数

Step2. 编译器查看函数参数个数、参数类型,选择一致的进行调用

PS:1. 方法的名字和参数列表为方法的签名(而不包括返回类型);与超类方法签名一致的子类方法会对其进行覆盖。

2. 如果是private或static或final 方法,编译器可以准确知道该调用哪个,因此为静态绑定;否则为动态绑定,运行时采取选择。

3. 虚拟机会预先为每个类创建一个坊发表,以减少时间开销。

### 5.1.4 阻止继承:final类和方法

### 5.1.5 强制类型转换

1. 只能在继承层次内进行类型转换

2. 在将超类转换成子类之前应使用instanceof进行检查

if(staff[i] instanceof Manager){

boss = (Manager) staff[i];

}

PS:如前所述,将子类引用赋给超类变量,编译器是允许的;但将一个超类引用赋给子类变量,必须进行类型转换。

### 5.1.6 抽象类

利用关键字abstract

包含一个或多个抽象类方法的类本身必须声明为抽象类(若子类仍然不实现该方法,则子类也应声明为抽象类); 不包含抽象方法也可以声明为抽象类;抽象类不能被实例化

abstract class Person{

public abstract String getDescription();

...

}

class Student extends Person{

private String major;

public Student(String n, String m){

super(n);

major = m;

}

public String getDescription(){

return "a student majoring in "+major;

}

}

Person[] people = new Person[2];

people[0] = new Employee(...);

people[1] = new Student(...);

for(Person p: people)

System.out.println(p.getName() + ", " + plgetDescription());

## 5.2 Object: 所有类的超类

1. 可以使用Object类的变量引用任何类型的对象(包括数组因为在java中,只有基本类型(Primitive types,即数值、字符、布尔型)不是对象):

Object obj = new Employee("Harry Potter", 35000);

Employee e = (Eployee) obj;

2. Object类中的方法:

(1) equals 对引用类型 看是否为同一对象,常用于判断是否为null

(2) getClass 返回对象所属的类

![](https://leanote.com/api/file/getImage?fileId=5ab6fc11ab6441355d000291)

package testCode;

import java.io.*;

class Person{

private

String name;

String gender;

int age;

public Person(String name, String gender, int age) {

this.name = name;

this.gender = gender;

this.age = age;

}

}

class Student extends Person{

private

String studentID;

public Student(String name, String gender, int age, String studentID) {

super(name, gender, age);

this.studentID = studentID;

}

}

class Teacher extends Person{

public Teacher(String name, String gender, int age) {

super(name, gender, age);

}

}

public class Test0{

public static void main(String[] args) throws IOException {

String str = null;

Person pervar = null;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 绑定到控制台的字符流br

while((str=br.readLine())!=null) {

System.out.println(str);

String arr[] = str.split(" ");

System.out.println(arr.length);

if(arr.length==3) {

pervar = new Teacher(arr[0], arr[1], Integer.parseInt(arr[2]));

}

else if(arr.length==4) {

pervar = new Student(arr[0], arr[1], Integer.parseInt(arr[2]), arr[3]);

}

System.out.println(pervar.getClass());

}

}

}

## 5.3 泛型数组列表ArrayList

import java.util.*; // get set add remove

ArrayList xlist = new ArrayList<>();

xlist.add(x1);

xlist.add(x2);

xlist.add(1, x3); // 1位置后面的元素会后移

xlist.set(0, x2);

xlist.get(0);

xlist.remove(2); // 2位置后面的元素会前移

X[] xarr = new X[xlist.size()];

xlist.toArray(xarr);

for(X tmpx : xlist)

do something with tmpx;

//等价于:

for(int i=0; i

X tmpx = xlist.get(i);

do something with tmpx;

}

// Integer类:

int intValue()

static String toString(int i)

static String toString(int i, int radix)

static int parseInt(String s)

static int parseInt(String s, int radix)

## 5.7 反射

3种方法获得class类:

1. Object类: .getClass() 返回 Class类对象

2. 任意类型: .class 返回对应的Class类对象 (如int.class, Date.class)

3. Class类: static函数 Class.forName(className) 返回类名为classname的Class对象

Class类: .getName() 返回该类的类名

Eployee e;

Class cl = e.getClass();

System.out.pringln(cl.getName());

Class clCopy = class.forName(e.getClass().getName());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值