Java学习笔记01

2019/11/11 PM 05:02
大家好,这边算是複习上课时的笔记,会陆续更新,希望对学习JAVA的初学者有些帮助。
也希望有错误的地方,各位前辈能够不吝啬的指教。

在建立物件实体时有两部分

1.在记忆体中规划出一块空间
2.利用建构式进行初始化的动作

在java里面最源头的父类别就是java.lang.Object。
在java里面所有类别都会有父类别,所有类别都会有建构式,但要看建构式来自于哪里,你定义了建构式,那就照定义的,没定义就找父类别的无传参数建构式。

找不到就出错了,需要在建构式里写super(参数);
将extends类别进行初始化才能extends父类别,并使用父类别的方法。

建构式没有在extends的,extends的只有属性跟方法

建构式的第一道叙述句:一定是先执行父类别的无传参数建构式,执行完毕后才是执行你所撰写的部分。若你有指定super(参数)的情况下,才是执行父类别的有传参数建构式,只要没写,就是执行无传参数建构式。

在extends的情况下:已经写了建构式所以不会使用父类别的建构式了,之所以还看到父类别无传参数建构式的内容是因为在建构式会将父类别一併进行初始化的动作所以也会执行父类别的无传参数建构式。

建构式观念:
1.自订类别下,没有撰写,则会使用父类别的无传参数建构式。
2.若父类别没有无传参数建构式,则需要透过super指定父类别的哪一个有传参数建构式
3.建构式的第一道叙述句,一定优先将父类别初始化,才会进行子类别初始化的动作。(EX:没有父亲哪来儿子,相同道理当初始化父类别,父亲也会将爷爷拉进来,以此类推,所有的父类别都会一併在记忆体内被初始化)

4.以下举个实例:

public class Constructor01 {// 无传参数建构式public Constructor01() {System.out.println("Constructor01:无传参数建构式");}// 有传参数建构式public Constructor01(int a) {System.out.println("Constructor01:int a");}public Constructor01(int a, boolean b) {System.out.println("Constructor01:int a, boolean b");}}public class Constructor02 extends Constructor01{public Constructor02() {System.out.println("Constructor02:无传参数建构式");}public Constructor02(int a) {super(1,false);System.out.println("Constructor02:int a");}}public class RunConstructor {    public static void main(String[] args) {        Constructor02 obj5 = new Constructor02(1);    }}

其结果为:
Constructor01:int a, boolean b
Constructor02:int a

2019/11/11 PM 08:06

什么是多载(Overload)、覆写(Override)?

多载(Overload):一个类别中,定义同名称的方法,但参数不同的方法。
举个例子
以下为建构式的Overload

public class Constructor01 {// 无传参数建构式public Constructor01() {System.out.println("Constructor01:无传参数建构式");}// 有传参数建构式public Constructor01(int a) {System.out.println("Constructor01:int a");}public Constructor01(int a, boolean b) {System.out.println("Constructor01:int a, boolean b");}}

以下为方法method的Overload

public class Hello {public void helloWorld() {System.out.println("helloWorld");}public void helloWorld(String taiwan) {taiwan="taiwan";System.out.println("helloWorld"+taiwan);}public void helloWorld(int a, boolean b) {System.out.println("helloWorld" + a + b);}}

覆写(Override):当子类别extend父类别时,子类别能将父类别拥有的方法进行改写的动作。
举个例子;

public class Car {// 属性:speed(速度)protected double speed;// 时速表public double getSpeed() {return speed;}// 油门public void upSpeed() {speed = speed < 1 ? 1 : speed * 1.7;}// 煞车public void downSpeed() {speed = speed < 1 ? 0 : speed * 0.4;}}

当Scooter extends Car 并Override的时候

public class Scooter extends Car{    //因为Scooter(速克达),马力没有汽车那么大    //所以可以看到油门跟煞车的係数做了调整    // 油门@Overridepublic void upSpeed() {speed = speed < 1 ? 1 : speed * 1.3;}// 煞车@Overridepublic void downSpeed() {speed = speed < 1 ? 0 : speed * 0.7;}}

2019/11/11 PM 08:48
利用JAVA API string
来稍微玩一下建构式的部分
s1:String()
s2:String(byte[] bytes)
s3:String(byte[] bytes, int offset, int length)

public class RunString {public static void main(String[] args) {// StringString s1 = new String();byte[] b1 = { 97, 98, 99, 100 };String s2 = new String(b1);String s3 = new String(b1, 1, 2);System.out.println(s1);System.out.println(s2);System.out.println(s3);}}

其结果为下列显示
s1:
s2:abcd
s3:bc

至于为甚么s2、s3会出现英文,小弟学艺不精,只知道跟ASCII Code有关係,
目前已JAVA基础与物件导向複习为主,待複习完毕再来探讨这个部分。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章