Java学习笔记必看经典Word文档下载推荐.docx
《Java学习笔记必看经典Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Java学习笔记必看经典Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
其次,采用面向对象办法可以使体系各部分各司其职.各展其长.
对象之间的耦合性必定要低(比如不同硬盘和不同主板之间的关系).如许才能使每个对象本身做成最好的.
对于对象的请求:
高内聚.低耦合,如许轻易拼装成为一个体系.
实现高内聚就是要最大限度低进步复用性(复用性好是因为高内聚).
可复用性是OOP的基本.
比较面向进程的思惟和面向对象的思惟:
面向进程的思惟:
由进程.步骤.函数构成,以进程为焦点;
面向对象的思惟:
以对象为中间,先开辟类,得到对象,经由过程对象之间互相通讯实现功效.
面向进程是先有算法,后稀有据构造.
面向对象是先稀有据构造,然后再有算法.
在用面向对象思惟开辟的进程中,可以复用对象就进行复用,如无法进行复用则开辟新的对象.
开辟进程是用对个简略的对象的多个简略的办法,来实现庞杂的功效.
从语法上来看,一个类是一个新的数据类型.
在面向对象编程中,除了简略数据类型,就是对象类型.
界说类的格局:
classStudent{
代码
}
留意类名中单词的首字母大写.
实例变量:
界说在类中但在任何办法之外.(New出来的均有初值)
局部变量:
界说在办法之中的变量.
局部变量要先赋值,再进交运算,而实例变量均已经赋初值.这是局部变量和实例变量的一大差别.
实例变量的对象赋值为null.
局部变量不许可规模内界说两个同名变量.实例变量的感化域在本类中完整有效,当被其他的类挪用的时刻也可能有效.
实例变量和局部变量许可定名冲突.
书写办法的格局:
润饰符返回值办法名挪用进程中办法体
可能消失的破例
publicint/voidaddNumber(参数)throwExcepion{}
例:
publicintaddNumber(inta,intb){
注:
办法名中的参数inta,intb为局部变量
类办法中的一类特别办法:
构造办法.
构造办法是当用类生成对象时,体系在生成对象的进程中应用的办法.
留意:
构造办法在生成对象的时刻会被挪用,但并不是构造办法生成了对象.
构造办法没有返回值.格局为:
public办法名.
构造办法的办法名与类名雷同.
构造办法是在对象生成的进程中主动挪用,不可能应用指令去挪用.
在一个对象的生成周期中构造办法只用一次,一旦这个对象生成,那么这个构造办法掉效.
用类来生成对象的语句:
Students=newStudent().
第一个Student表示这是用Student类进行界说.“Student()”表示挪用一个无参数的构造办法.
假如()中有参数,则体系构造对象的进程中挪用有参的办法.
此时S称为一个对象变量.
Students的存储区域存放的是地址:
一个对象在硬盘上占领一个持续地址,首地址付与s空间.
S称为对象Student的引用.
在对象变量中存放的是引用(地址);
在简略变量中存放的是数值.
可以构造多个构造办法,但多个构造办法的参数表必定不同,参数次序不同即属于不同的构造办法:
publicstudent(stringname,inta){
publicstudent(inta,stringname){
为两个不同的构造办法.
假如我们未给体系供给一个构造办法,那么体系会主动供给一个为空的构造办法.
演习:
写一个类,界说一个对象,界说两个构造办法:
一个有参,一个无参.
(编写一个程序验证对象的传递的值为地址)
留意下面这种情势:
staticvoidchangename(studentstu){stu.setName“LUCY”}
留意生成新的对象与旧对象指向无关,生成新对象性命灭亡与旧对象无关.
面向对象办法的重载(overloading)和笼罩(overriding).
在有些JAVA书本中将overriding称为重载,overloading称为过载.
Overloading在一个类中可以界说多个同名办法,各个办法的参数表必定不同.但润饰词可能雷同,返回值也可能雷同.
在程序的编译进程中依据变量类型来找响应的办法.是以也有人以为overloading是编译时的多态,今后我们还会学到运行时多态.
为什么会消失overloading技巧呢?
作为应对办法的细节.
应用类型的差异来影响对办法的挪用.
吃()可以分为吃肉,吃菜,吃药,在一个类中可以界说多个吃办法.
构造办法也可以实现overloading.例:
publicvoidteach(){};
publicvoidteach(inta){};
publicvoidteach(Stringa){}为三种不同的办法.
Overloading办法是从低向高转.
Byte—short—float—int—long—double.
在构造办法中,this表示本类的其他构造办法:
student(){};
student(stringn){
this();
//表示挪用student()
假如挪用student(inta)则为this(inta).
特别留意:
用this挪用其他构造办法时,this必须为第一条语句,然后才是其他语句.
This表示当前对象.
PublicvoidprintNum(){
Intnumber=40;
System.out.println(this.number);
此时打印的是实例变量,而非局部变量,即界说在类中而非办法中的变量.
This.number表示实例变量.
谁挪用this.number那么谁即为当前(this)对象的number办法.
封装:
使对象的属性尽可能私有,对象的办法尽可能的公开.用private表示此成员属性为该类的私有属性.
Public表示该属性(办法)公开;
Private表示该属性(办法)为只有本类内部可以拜访(类内部可见).
(想用private还要用set和get办法供其他办法挪用,如许可以保证对属性的拜访方法同一,并且便于保护拜访权限以及属性数据正当性)
假如没有特别情形,属性必定私有,办法该公开的公开.
假如不指明谁挪用办法,则默以为this.
区分实例变量和局部变量时必定要写this.
11.29
持续:
父类(SuperClass)和子类(SonClass).
父类的非私有化属性和办法可以默认持续到子类.
ClassSonextendsFather{
而假如父类中的私有办法被子类挪用的话,则编译报错.
父类的构造方办法类不可以持续,更不消失笼罩的问题.(非构造办法可以)
假如子类拜访父类的构造办法,则在编译的时刻提醒拜访不到该办法.
JAVA中不允很多持续,一个类有且只有一个父类(单持续).
JAVA的数据构造为树型构造,而非网状.(JAVA经由过程接口和内部类实现多持续)
办法的笼罩(overriding)
办法的重载并不必定是在一个类中:
子类可以从父类持续一个办法,也可以界说一个同名异参的办法,也称为overloading.
当子类从父类持续一个无参办法,而又界说了一个同样的无参办法,则子类新写的办法笼罩父类的办法,称为笼罩.(留意返回值类型也必须雷同,不然编译出错.)
假如办法不同,则成重载.
对于办法的润饰词,子类办法要比父类的办法规模加倍的宽泛.
父类为public,那么子类为private则消失错误.
之所以构造办法先运行父类再运行子类是因为构造办法是无法笼罩的.
以下规模依次由严到宽:
private:
本类拜访;
default:
表示默认,不仅本类拜访,并且是同包可见.
Protected:
同包可见+不同包的子类可见
Public:
表示所有的地方均可见.
当构造一个对象的时刻,体系先构造父类对象,再构造子类对象.
构造一个对象的次序:
(留意:
构造父类对象的时刻也是这几步)
1递归地构造父类对象;
2次序地挪用本类成员属性赋初值语句;
3本类的构造办法.
Super()表示挪用父类的构造办法.
Super()也和this一样必须放在第一行.
This()用于挪用本类的构造办法.
假如没有界说构造办法,那么就会挪用父类的无参构造办法,即super().
要养成优越的编程习惯:
就是要加上默认的父类无参的构造办法.
思虑:
可是假如我们没有界说无参的构造办法,而在程序中构造了有参的构造办法,那么假如办法中没有参数,那么体系还会挪用有参的构造办法么?
应当不会.
多态:
多态指的是编译时类型变化,而运行时类型不变.
多态分两种:
1编译时多态:
编译时动态重载;
2运行时多态:
指一个对象可以具有多个类型.
对象是客不雅的,人对对象的熟悉是主不雅的.
Animala=newDog();
查看格局名称;
Dogd=(Dog)a.声明父类来引用子类.
(思虑上面的格局)
运行时多态的三原则:
(应用时为笼罩)
1、对象不变;
(转变的是主不雅熟悉)
2、对于对象的挪用只能限于编译时类型的办法,如挪用运行时类型办法报错.
在上面的例子中:
对象a的编译时类型为Animal,运行时类型为dog.
编译时类型必定要为运行时类型的父类(或者同类型).
对于语句:
Dogd=(Dog)a.将d强迫声明为a类型,此时d为Dog(),此时d就可以挪用运行时类型.留意:
a和d指向同一对象.
3、在程序的运行时,动态类型剖断.运行时挪用运行时类型,即它挪用笼罩后的办法.
关系运算符:
instanceof
ainstanceofAnimal;
(这个式子的成果是一个布尔表达式)
a为对象变量,Animal是类名.
上面语句是剖断a是否可以贴Animal标签.假如可以贴则返回true,不然返回false.
在上面的标题中:
ainstanceofAnimal返回
True,
ainstanceofDog也返回
instanceof用于剖断是否将前面的对象变量赋值后边的类名.
Instanceof一般用于在强迫类型转换之前剖断变量是否可以强迫转换.
假如Animala=newAnimal();
Dogd=Dog()a;
此时编译无误,但运行则会报错.
Animala=newDog()相当于下面语句的功效:
Animala=getAnimal();
PublicstaticAnimal.getAnimal;
ReturnnewDog();
封装.持续.多态为面向对象的三大基石(特征).
运行时的动态类型剖断针对的是办法.运行程序拜访的属性仍为编译时属性.
Overloading针对的是编译时类型,不消失运行时的多态.
习题:
树立一个shape类,有circle和rect子类.
Shape类有zhouchang()和area()两种