在第九次课,主要讲到了下面的知识:包装类、字符串转成基本数据类型的三种方法、基本数据类型转字符串的方法、Object的toString()和equals()方法的使用、final修饰类、方法、变量、抽象类
一、包装器(wrapper)类
2、为了弥补基础数据类型进行计算和转换的繁琐操作(有利于类型转换)
3、自动装箱(Integer int = 100,隐式转换)和拆箱(int it = int;)
4、jdk1.5+后系统自动进行装箱和拆箱操作
二、字符串转成基本数据类型的三种方法:
1、利用包装类里面的parseXxx(String s)的静态方法,注意:Character没有ParseXxx()方法
2、利用包装类的Xxx(String s)构造器,如:
3、Xxx.valueOf(String s)方法
String markString = "45.9";
double m1 = Double.parseDouble(markString);
System.out.println(m1);
double m2 = Double.valueOf(markString);
System.out.println(m2);
double m3 = new Double(markString);
System.out.println(m3);
运行结果:
45.9
45.9
45.9
4、介绍一个用于其他进制转换成十进制的方法:valueOf(String s, int radix),radix表示基数,即多少进制,s为你原来的进制的数值,注意:十六进制s中的前两个字符不能是“0x”,否则会抛出异常;八进制的s中的首个字符可以是“0”,也可以不写“0”。
如:
<span style="font-size:18px;"> int age = Integer.valueOf("11", 16);
System.out.println("十六进制字符串转换成十进制:" + age);
</span>
运行结果:
<span style="font-size:18px;"> 十六进制字符串转换成十进制:17</span>
三、基本数据类型转字符串的方法
1、建议使用:String.valueOf(xxx);
int num = 12;
String numsString = String.valueOf(num);
System.out.println("number = " + numsString);
运行结果:
number = 12
2、也可以使用:基本数据类型与”” 进行连接运算(但是不够优雅)
四、Object的toString()和equals()方法的使用注意事项
1、toString()返回对象的“自我描述”
2、 == : 用于基础数据类型判断
equels() : 用于引用数据类型判断
如:
String s1 = "hello";
String s2 = "hello";
System.out.println("s1 == s2判断结果:"+(s1==s2));
String s3 = new String("hello");
String s4 = new String("hello");
System.out.println("s1 == s3判断结果:"+(s1==s3));
System.out.println("s3.equals(s1)判断结果:"+s3.equals(s1));
System.out.println("s3.equals(s4)判断结果:"+s3.equals(s4));
运行结果:
s1 == s2判断结果:true
s1 == s3判断结果:false
s3.equals(s1)判断结果:true
s3.equals(s4)判断结果:true
3、补充:""和null的简单区别
null没内存地址;
""有内存地址,空字符串。
即:
空字符串:系统会为它分配内存空间;
null:系统不会为它分配内存空间。
五、final修饰类、方法、变量
1、final修饰的类不能被继承
2、final修饰方法不能被重写
3、对于fianl修饰的变量:
(1)final成员变量一旦有了初始值,就不能被重新赋值
如果不赋值,系统将会默认给它分配0、null或者false等值,毫无意义,也无法再次改变,所以必须显式初始化;
(2)
a.final实例变量:可以在普通初始化块中赋初始值,或直接指定,或在构造器中赋值,如:
class Shilibl{
final String string;
{
string="s1";
}
final String string2="s2";
final String string3;
public Shilibl(String string3) {
this.string3 = string3;
}
void print(){
System.out.println(this.string3+"\n还有:s1 = "+string+"\ns2 = "
+string2);
}
public static void main(String[] args) {
Shilibl shilibl = new Shilibl("我是s3");
shilibl.print();
}
}
运行结果:
我是s3
还有:s1 = s1
s2 = s2
b.final类变量:可以在静态初始化块赋初始值,或直接指定,如:
class Jingtaibl{
final static String string1;
static{
string1="我是s1";
}
final static String string2="我是s2";
public Jingtaibl() {
}
void print(){
System.out.println("s1 = "+string1+"\ns2 = "
+string2);
}
public static void main(String[] args) {
Jingtaibl jingtaibl = new Jingtaibl();
jingtaibl.print();
}
}
运行结果:
s1 = 我是s1
s2 = 我是s2
(3)系统不会对局部变量进行初始化:
可以在定义时候指定,也可以不指定默认值,参照第一小点的规则。
(4)基本类型:不能重复赋值
引用类型:它仅仅是保存一个引用,只保证引用地址不会改变即可,也就是说对象本身是可以改变的,如:
//<span style="font-size:18px;">数组对象在变
final int [] iArr = {3,4,2,9,6};
System.out.println(Arrays.toString(iArr));
//进行排序
Arrays.sort(iArr);
System.out.println(Arrays.toString(iArr));
//赋值
iArr[3] = 7;
System.out.println(Arrays.toString(iArr));</span>
运行结果:
<span style="font-size:18px;">[3, 4, 2, 9, 6]
[2, 3, 4, 6, 9]
[2, 3, 4, 7, 9]</span>
六、抽象类
1、抽象类和抽象方法使用abstract修饰符来定义;
注意:抽象类的修饰符必须为public或protected,不能为private,缺省情况下默认是default
当修饰符为public时,一个在A项目的zilei包中的子类(文件为:zilei.java)如何继承自一个再B项目的fulei包中的父类(文件为:fulei.java)呢?
(1)目录结构:A为子类所在的项目,B为父类所在的项目
(2)父类和子类初始状态分别为:
(3)为了能让zilei继承fulei,需要A项目引用B项目:
首先。A项目右键“Properties”,接下来按照如图所示的步骤操作:
(4)接着在zilei中继承父类,但是遇到错误:
(5)需要修改父类的play()和work()方法的可见性:
(6)现在在子类zilei中就可以继承父类fulei,并实现父类中未实现的方法:
在第五步中,也可以把子类声明为抽象类。
2、抽象方法不能有方法体,即:public returnType abstractMethodName();
注意:抽象方法的修饰符必须为public或protected,不能为private,缺省情况下默认是default
3、抽象类不能被实例化,只能通过被子类继承来使用
注意点:(1)子类如果不是抽象类,则必须重写其所继承的抽象类的所有抽象方法,下面通过例子来说明:
<span style="font-size:18px;">abstract class Fulei{
abstract void play();
abstract void work();
}
class Zilei extends Fulei{
@Override
void play() {
}
@Override
void work() {
}
}</span>
(2) 如果子类是抽象类,可以重写,也可以不重写所继承的父类的任意数量的抽象方法,照样通过例子来说明:
<span style="font-size:18px;">abstract class Fulei{
abstract void play();
abstract void work();
}
abstract class Zilei extends Fulei{
@Override
void play() {
}
}
abstract class anotherZilei extends Fulei{
}</span>
4、含有抽象方法的类智能被定义为抽象类
七、作业
<span style="font-size:18px;">package chouxianglei;
import java.util.List;
public abstract class Shape {
private String color;
public abstract double computCircumference();
public abstract String getType();
public Shape(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}</span>
<span style="font-size:18px;">package chouxianglei;
public class Circle extends Shape {
private double radius;
private final double PI = 3.14;
public Circle(String color,double radius) {
super(color);
this.radius = radius;
}
@Override
public double computCircumference() {
return 2*PI*radius;
}
@Override
public String getType() {
return "圆形";
}
public static void main(String[] args) {
Circle circle = new Circle("红色", 10);
System.out.println("颜色:"+circle.getColor());
System.out.println("形状:"+circle.getType());
System.out.println("周长:"+circle.computCircumference());
}
}</span>
运行结果:
<span style="font-size:18px;">颜色:红色
形状:圆形
周长:62.800000000000004</span>