java知识摘要.docx

上传人:b****2 文档编号:2199334 上传时间:2022-10-27 格式:DOCX 页数:19 大小:91.98KB
下载 相关 举报
java知识摘要.docx_第1页
第1页 / 共19页
java知识摘要.docx_第2页
第2页 / 共19页
java知识摘要.docx_第3页
第3页 / 共19页
java知识摘要.docx_第4页
第4页 / 共19页
java知识摘要.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

java知识摘要.docx

《java知识摘要.docx》由会员分享,可在线阅读,更多相关《java知识摘要.docx(19页珍藏版)》请在冰豆网上搜索。

java知识摘要.docx

java知识摘要

对象和类

对象和类的简介(不再说)

Java是大小写敏感的语言

定义类

修饰符class类名称{

//成员变量

//方法

}

成员变量的作用域

在java中变量的作用域是又{}确定的

Intx;

Inty=x+3;

类成员变量的声明与顺序不受限制,处右边这种情况

一般类的成员变量作用于整个类,方法中声明的变量仅

作用于该方法,也叫做局部变量

方法重载

我们在命名的时候遵循见名知意的原则,所以会出现同名的情况,比如两个int相加叫加,那么两个String相加也叫加为了解决这样一个问题,有个重载的机制。

注意:

1、仅返回值类型不同,不叫重载会报方法名冲突的错误

2、参数的不同可以自动转型得到的,不叫重载如:

voidprint(inta,floatb){};

voidprint(floata,intb){}

这种情况会报错,因为可以int可以自动转型为float;

如定义一个函数voidadd(doublex){}

我们这样调用add(3);3是int但是也不会报错错这就是为什么不能重载;

我们可以将重载描述如下:

在一个类中,函数名完全相同,参数列表不同叫做重载

其中参数列表不同包括:

类型不同,数量不同,顺序不同

创建对象

Personalp1=newpersonal()

inti=3

Personalp1=newpersonal();这就是创建了一个personal类型的对象并用personal类型的变量p1指向它

构造函数

构造函数是用来初始化一个对象的

构造函数一般通过new关键字来调用

1、方法名必须与创建对象的类名相同

2、不允许声明返回类型,即使声明为void也不行

3、java会给我们提供一个默认的构造函数,一旦自定义java将不再提供默认的函数

构造函数具有一般函数的特性,比如可以重载,但又有其特殊性

This关键字

This可以简单理解等效于所在类的类名,为了便于区分不用作用域的同名变量而设计

publicclassStudent{

publicintage;

publicStudent(inta){

age=a;

}

}

以上我们通过构造函数初始化一个成员变量age,但是我们为了遵循见名知意的原则,把形式参数a换成age,就会出现age=age的奇怪语句,并且变量指向有就近原则,即使不出错我们也无法给成员age赋值;因此:

publicclassStudent{

publicintage;

publicStudent(intage){

this.age=a;

}

}

举例说明

上文中的this.age可以理解为Student.age;

初始化问题

意思就是说,声明一个变量,不赋值,他到底是几?

记住值类型(int,long,float,double,boolean)类型的默认初始值是对应格式的0

string自定义类(比如你定义的Student就叫做自定义类)等引用类型的默认初始值是null

Static关键字

这里不再讲什么堆内存,栈内存,只做形象说明用static修饰的成员称为静态成员,一般紧跟public,private等权限修饰符之后,如:

publicstaticinta;

静态方法和静态变量都可以通过类名直接调用,那么什么情况下声明成静态类型呢?

举例说明:

如果我们定义一个学校类,里面有一个太阳变量,这个变量一般都要被定义成静态变量,我们可以实例化很多学校实例,如果有一个学校执行了一句“太阳下山了”,这是你查看所有的学校,会发现他们也都发现“太阳落山了”,这样比较符合实际,也就是说静态类型,无论被实例化多少次,他在内存中只有一份;

再如:

我们定义一个学生类,类中有一个耳朵变量也定义成static,如果一个同学执行了一句“我的耳朵被狗咬掉了”,那么这时就会出现所有人的耳朵都被狗咬掉了,明显不符合实际,这样的变量就不能被定义为静态的

对象的清理

Java中引进了内存回收机制,java会自动判断我们new出的对象有没有用,他怎么判断你先不要管,当这些对象不再使用的时候,java会选择一个合适的时机将其清理掉;

Finalize()该方法可以自定义垃圾回收规则,一般我们让其自动回收,不人为干预他的回收

只需要知道三点:

1、new出的对象采用这种回收机制栈内存中的变量(变量名等)是按照生命周期进行释放(变量的作用域决定该变量的声明周期);2、我们不知道垃圾回收器什么时候会去回收;3、可以通过finalize()方法自定义回收规则。

java中四个访问修饰符(不想深入了解只看图示和总结即可)

访问修饰符包括:

public、(friendly)、protected、private;其中java中并没有friendly关键字,默认(什么也不写)就被认为是友元类型注意:

default只是一种说明,他不能作为关键字放在类前面,default就是什么也不写;尽管java中有default关键字,但是那个关键字和这里的default类型没有关系,比如swich语句中会用到default关键字

访问修饰符的对象:

类、类成员(方法、属性)

各修饰符的权限:

权限是基于面向对象的封装性而提出的,对于类内部无所为权限,类内部是可以相互访问的;

那么为什么要求这些访问限制呢?

我在这里用一个比喻来解释,类成员的关系就好像我们的教学楼和教室的关系,我们要进一个教室需要两个前提,教学楼的门是开着的,教室的门也是开着的,那么我们会发现这样一个问题:

如果教室的门都开,教学楼的门却是锁着的,是不是没有什么意思?

于是java里面规定:

修饰类的修饰符只有两种,一种是public,另外一种是缺省就是什么也不写;

什么是访问?

可以狭义的理解为以下几种操作叫做访问,如:

调用方法(对方法的访问)、给一个变量赋值或取一个变量的值(对变量的访问)

protected与public可以,protected的一个说法就是希望不是同一个包的类想调用它就必须通过继承来调用,否则不能。

图示:

黑色粗线代表可以访问

总结:

类前面要么写public要么什么也不写,什么也不写的只能在同一个包内访问;(不清楚包概念的记住就行了)

在一个包内public和protected和默认(什么都不写)一样

不同包内public可以访问,protected需要通过子类来访问,默认的不能访问;

private只有自己可以访问;

具体隐藏实现

他的一个用途就是防止某些非法操作,比如不能将年龄设为负值或者让某个属性设为只读;

publicclassA{

privateintage;

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

if(this.age>0){

this.age=age;

}

}

}

举例:

这样我们就对age属性做了一个限制,如果想设置为只读,不写set方法就行了

参数传递

classStudent{

publicintage;

publicStringname;

publicStudent(inta,Stringn){

age=a;

name=n;

}

}

Java中,参数传递分为值类型传递,和引用类型传递

publicclassTestPass1{

publicstaticvoidchangAge(inta,intage){

a=age;

}

publicstaticvoidchangAge(Studentst,intage){

st.age=age;

}

publicstaticvoidchangAge(Studentst,intage,Stringname){

st=newStudent(age,name);

}

publicstaticvoidmain(String[]args){

Studentst1=newStudent(19,"jack");

changAge(st1.age,20);

System.out.println(st1.age);

changAge(st1,20);

System.out.println(st1.age);

changAge(st1,20,"juilei");

//System.out.println(st1.age+"and"+st1.name);

}

}

上面定义了一个Student类,主函数中定义了三个方法,分别调用:

当执行下面几句时:

Studentst1=newStudent(19,"jack");

changAge(st1.age,20);

System.out.println(st1.age);

输出结果为:

19

当执行下面几句时:

changAge(st1,20);

System.out.println(st1.age);

输出结构为:

20

看到这应该还能理解,但你不要认为只要接受的是引用类型变量就可以改变对象的成员,看下面几句:

不做深入了解的同学看到这即可,不然到这你懂了,往下看你又晕了

changAge(st1,20,"juilei");

System.out.println(st1.age+"and"+st1.name);

输出结果为:

19andjack

这里本来的目的是想通过重新实例化一个对象让st1变量指向他,但是实际上传进来还是st1的拷贝,故没能改变.

到此,你会发现java中参数的传递都是值传递,没有提供向其他语言如vb,中可以通过关键字byval,byref进行值传递和地址传递的选择。

继承和多态

继承基础

由于访问修饰符的存在,并不是所有父类的成员都能被继承具体情况请参考上一章访问修饰符

什么事被继承,通俗的将就是指在子类外可以按照一定规则(访问权限)直接.出其父类成员,就叫做该成员被继承

需要注意的是四种访问权限仅有protected会因继承而发生变化,其他不变;即:

包内不会因为继承而改变访问权限,包间只有protected会因继承发生变化,其他不变;

构造器的调用顺序(假设类A继承自类B(AextendsB))

情况一:

AB都是系统默认的构造函数我们直接new就行了,A的构造函数会自动调用B的构造函数

CASE2:

B自定义了构造函数这是我们如果直接newA就会报找不到super()的错误,那么我们就不得不自定义A的构造函数,

PublicA(){

Super(参数列表)//必须放在第一行

……

}

父类的构造函数必须放在第一行

CASE3:

A需要自定义构造函数你看看CASE2的构造函数还是系统默认的吗?

(一旦父类自定义了构造函数,子类的构造函数不得不自定义)

继承还是组合

程序设计时一般遵循高内聚,低耦合的原则,因此要谨慎选择是组合还是继承(看

不懂,跳过就行了)

继承有很多弊端如:

增加了耦合程度,破坏了父类的封装性,因此我们的原则是:

优先选择组合,且组合与继承之间要以具体情况而定,此处不再举例;

Object类

java不支持多继承即一

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1