黑马程序员全套Java教程_Java基础入门视频教程,零基础小白自学Java必备

引言:我认为,学习编程语言,语法是可以通过随时查找+做练习巩固的,学习过程中这不是重点,重点是语言和内存之间的关系、使用规范背后的更底层的逻辑。


类的数据类型,
如Scanner sc=new Scanner(System.in);
称sc为Scannerl类的对象。




包括创建和使用

(1)

(2)




堆内存的变量有默认初始值,栈内存的变量无默认初始值

一个类里的成员方法可以调用这个类和与它有继承关系的父类的成员方法:
(1)static的成员方法只能调用静态的成员方法,使用静态的成员变量
(2)非static的成员方法调用成员方法和变量与它们是否static无关

类中&方法外的是成员变量,
方法里的是局部变量。




调用set函数时,因为自己可以修改set()所以可以增加对不合理数据的筛选

Student类和StudentDemo标准类


this.在内存中的实现原理:
this在哪个对象调用的成员方法里,this就是哪个对象的地址。(P4)

示例:





String类的构造方法(讲了4种,推荐第四种直接赋值)



字符串的拼接


字符串的连接用如图代码时,由该程序运行时内存图可知:常量池中001、002地址及其空间均被浪费


StringBuilder类的两个方法:append() reverse()

链式增长

StringBuilder类的reverse、append方法很好用,但String不能用。通过将String转为StringBuilder,使用reverse、append方法后再转换回String就可以实现目的。
(1)构造方法StringBuilder(String s)
成员方法 toString()

(2)

(1)字符串的拼接2.0

(2)用StringBuilder与String相互转化完成字符串反转

StringBuilder和String类均有length()方法

(1)


(2)ArrayList类的方法使用示例

(1)创建ArrayList类的对象array,并将String类的对象存入array:

(2)



(3)


实现学生管理系统:


Alt+ins自动生成构造方法、成员方法(get、set)等

继承:提取共同部分

示例:



继承的好处&弊端&何时适合使用继承:


子类:狗;父类:动物
<=> 狗是动物的一种

示例: z.show()方法调用时使用weight变量,先从z对象所属的类 Zi 里的成员方法show()里找是否含有局部变量weight, 若没有从 Zi 里找是否含有成员变量weight,若没有从 Fu 里找是否含有成员变量weight







(1)继承的构造方法

当Fu中无参构造方法被注释掉,Zi类中构造方法由于默认第一句是:
super() //调用Fu类无参构造方法,故而报错。
将Zi类构造方法方法体第一句均加上:
super(Fu中构造方法的参数的实参)
//通过调用Fu中含参方法体完成Fu类的初始化




(2)继承的成员方法




方法重写

示例:
Phone类里有call()的成员方法。NewPhone类里有call()的成员方法,其中用super访问Phone类里的call()








案例:
【一】

(2)带参:
测试类:

注:第5行会报错,是因为:
一个类中若无构造方法,系统会自动给一个无参构造方法;
一个类中若有含参构造方法,系统不会自动给无参构造方法,需要手动写无参构造方法。
改后:

Teacher类(子类):

Person类(父类):

Student类(子类):

【二】


注:
(1)在用途方面:含参构造方法==无参构造方法+set方法
(2)在两个子类里要写上含参和无参构造方法,如果已经写好父类,含参构造方法也可以根据父类的成员变量Alt+ins自动生成
Cat类

Dog类

Animal类

测试类




示例:



四种权限修饰符:

权限大小(修饰方法时):

示例:

(1)不同包下无继承关系的类使用Fu类下的成员方法:

(2)不同包下有继承关系的类使用Fu类下的成员方法:

(3)相同包下有继承关系的类使用Fu类下的成员方法:

(4)Fu类里使用自己的成员方法:

修饰成员变量时:
private:在测试类调用用set、get方法,故而需要在类里面添加二方法
public:直接调用
不加修饰符:默认,可以直接调用

final修饰:类、成员方法、局部&成员变量
(1)final修饰父类的成员方法:该方法不能被重写


(2)final修饰成员变量:该变量无法再被赋值

(3)final修饰类:该类不能做父类


(4)final修饰局部变量


static修饰:成员方法、成员变量
【1】修饰成员变量时:
一个类中定义的静态成员变量,在赋值时最佳采用类调用赋值,被赋值后被该类定义的所有对象共享,在测试类里赋值时用类访问赋值


【2】修饰成员方法时:
(1)static修饰的成员方法只能调用静态的成员方法,使用静态的成员变量
(2)无static修饰的成员方法调用成员方法和变量与它们是否static无关(均可使用)
示例:



例:



向上转型(多态)

(1)例:age在Animal类中有,所以通过编译,weight在Animal类中没有,所以没有通过编译,访问的是Animal类的成员变量age;
eat( )在Animal类中有,所以通过编译,playGame( )在Animal类中没有,所以没有通过编译,访问的是Cat类的成员方法eat()。




给两个类分别创建一个对象,第一个类里含有一个无参构造方法,第二个类含有一个含参构造方法且参数是第一个类的对象
即如:
第一个类:

第二个类:

测试类:

输出:

解释:

(2)示例:
左边有该成员方法==>可以通过编译
右边没有该成员方法==>调用左边的




(3)当子类有父类没有的功能时,称之为特有功能,调用时无法通过编译

向下转型:将父类引用强制类型转换为子类对象,可以凭借转换后的对象调用子类特有成员方法


示例:猫和狗多态版





抽象方法:只有方法声明,没有方法体
用abstract关键字修饰

抽象类里面可以有抽象方法也可以有非抽象方法:

(1)抽象类里面可以没有抽象方法,但抽象方法一定在抽象类里面
抽象类不是具体的,不能创建对象


在子类里函数重写,用多态都形式创建对象

抽象类的子类要重写抽象类的所有抽象方法,
否则也是一个抽象类,示例:



抽象类的成员:
(1)成员变量

final修饰(常量)与 final不修饰(变量)的效果和非抽象类一样


提高了代码复用性:是指抽象类用多态创建对象,多态用到了继承,所以提高了代码复用性

猫和狗抽象类版本:

抽象类里的抽象方法限定了子类必须完成某些动作(去掉abstract后重写某些方法)




类implements接口
接口是抽象的不能被实例化,用实现类实例化(也是多态形式)




抽象类多态和接口多态用的多

接口内成员变量默认被final修饰



(1)接口的成员变量:
不能不初始化,不能修改(因为final),可以用类去调用(因为static)
【默认是public static final类型】

Object()是每一个类的祖宗类,所有类都直接或间接继承该类

(2)接口无构造方法,

super()调用的其实是Object类的无参构造方法

实际上类与接口之间关系:

(3)接口里只能是抽象方法,因为默认 public abstract:

默认 public abstract


【案例】猫与狗

Animal为抽象动物类,要被Cat、Dog类继承,还要有抽象成员方法eat(),在Cat、Dog类里重写;

Cat、Dog类继承Animal类(重写Animal类里的抽象方法),实现Jumpping接口(重写接口里的方法);

Jumpping里写抽象成员方法jump;

Demo类里

接口:
(1)一继承多

(2)类实现多个接口

接口与抽象类的区别:
(1)语法区别:


(2)


分析方法具体类和抽象类:
从具体开始向上分析(向上逐层归纳共同点直至归一):

具体类:乒乓球运动员、篮球运动员、乒乓球教练、篮球教练
抽象类:运动员、教练、人

实现:
先实现接口,再从高到低实现抽象类,最后实现具体类,在Demo里通过具体类的对象调用方法。
代码(光给出乒乓球运动员):





类、抽象类、接口作为形参和返回值的问题:
【1】类名作为形参和返回值:




【2】抽象类作为形参和返回值




【3】接口作为形参和返回值

示例:





(1)内部类可以直接调用外部类成员:

//成员:成员变量、构造方法、成员方法
(2)外部类调用内部类成员:创建方法,再在方法里创建内部类对象,调用内部类成员


【1】成员内部类的访问:
(1)成员内部类非私有(不常用):

示例:


(2)之所以把一个类放进另一个类里,是不想把它的内容隐藏起来不想让外部看到,其中成员不想被外界直接访问
------------------------------>修饰符为private:


在外部类建立方法method(),在该方法中创建内部类对象,调用内部类方法show(),通过在测试类里调用外部类对象的method方法调用show()
【2】



API继续学习:
【1】Math类:
lang包下不需要导包

final修饰:无子类

成员方法和成员变量被static修饰,可以直接用类调用,无构造方法

【2】System
成员方法和成员变量被static修饰,可以直接用类调用,无构造方法