java总结大全包括所有java基础知识点.docx

上传人:b****6 文档编号:7152982 上传时间:2023-01-21 格式:DOCX 页数:82 大小:78.02KB
下载 相关 举报
java总结大全包括所有java基础知识点.docx_第1页
第1页 / 共82页
java总结大全包括所有java基础知识点.docx_第2页
第2页 / 共82页
java总结大全包括所有java基础知识点.docx_第3页
第3页 / 共82页
java总结大全包括所有java基础知识点.docx_第4页
第4页 / 共82页
java总结大全包括所有java基础知识点.docx_第5页
第5页 / 共82页
点击查看更多>>
下载资源
资源描述

java总结大全包括所有java基础知识点.docx

《java总结大全包括所有java基础知识点.docx》由会员分享,可在线阅读,更多相关《java总结大全包括所有java基础知识点.docx(82页珍藏版)》请在冰豆网上搜索。

java总结大全包括所有java基础知识点.docx

java总结大全包括所有java基础知识点

System.out.println(010);

输出八进制数010的十进制值8

注意是数字0开头,不是字母o

16进制以0x或0X开头

classValHold{

publicinti=10;

}

publicclassObParm{

publicvoidamethod(){

ValHoldv=newValHold();

another(v);

System.out.println(v.i);

}

publicvoidanother(ValHoldv){

v.i=20;

ValHoldvh=newValHold();

v=vh;

System.out.println(v.i);

}

publicstaticvoidmain(String[]argv){

ObParmo=newObParm();

o.amethod();

}

}

此题的答案是

10

20

为什么不是

10

10呢?

这样解释吧,按照sun官方的说法:

当一个引用变量作为参数传递给一个方法时,在这个方法内可以改变变量的值,即改变引用指向的对象,(本题中将vh赋给v)但是方法的调用结束后,改变量恢复原来的值,即变量仍然指向原来的对象。

(即another(v)调用结束之后,v又回复到第一次ValHoldv=newValHold();时指向的地址空间。

但是如果在方法内改变了引用指向的对象的数据(属性),那么当方法的调用结束后,尽管引用仍然指向原来的对象,这个对象的某个属性已经被改变了(v的i值在执行v.i=20的时候就已经被改变了,所以调用another结束后,v.i已经变成了20)

重载overload方法不能用返回值判断,而应当以参数判断(有无参数、参数类型、参数个数、参数排列顺序)

publicclassInOut{

Strings=newString("Between");

publicvoidamethod(finalintiArgs){

intiam;

classBicycle{

Bicycle(){

System.out.println(s);//这两句话可以,也就是说可以访问s

System.out.println(iArgs);//和finalint常量

//System.out.println(iOther);

}

}

newBicycle();

}

publicvoidanother(){

intiOther;

}

publicstaticvoidmain(String[]args){

InOutinout=newInOut();

inout.amethod(22);

}

}

Innerclass

Innerclass能够存取外部类的所有实例变量----无论这些实例变量有什么样的存取控制符(比如private),就像类中的方法能够存取方法所在类的所有变量一样;

 

如果innerclass定义在方法中,则innerclass能够存取方法所在的类中的实例变量,也能存取该方法中的局部变量,但该局部变量必须是final的,也就是只能访问方法中的常量.

(上面所说的都是普通内部类,不是静态内部类的情况)

 

floatf=1/3;

floatf=10;//输出10.0

inti=1/3;

intx=(int)(1.23);

doubled=999d;都是合法的表达式

如果将floatf=1/3;改成floatf=1/3f;则

f=0.0

i=0

d=999.0

f=0.33333334

Integer没有setValue方法。

instanceofTestswhetheraninstancederivesfromaparticularclassorinterface。

注意:

实现了某接口的类的对象也是该接口的实例;某类的对象也是该类父类的实例。

Interfacescannothaveconstructors接口没有构造函数

接口中的所有数据成员都是staticfinal,即静态常量(这两个关键字可以不写)但必须给常量赋初值;

接口中的所有方法都只有定义没有实现细节,并且全部为public(可以不写出来),所以接口中的方法全部是抽象方法

接口比抽象类更抽象

Runnable接口只有run()一个方法

注意:

不带参数

X位的数据类型的范围在-2x-1~2x-1-1

特例:

字符char型表示单个16位Unicode字符,所以它的取值范围0~216-1

classBase{

publicvoidBase(){

System.out.println("Base");

}

}

publicclassInextendsBase{

publicstaticvoidmain(Stringargv[]){

//System.out.println(99);//(*)

Ini=newIn();

//in.Base();显式调用Base()有输出,可见加了返回类型后,

Base()是一个普通的方法,不再是构造方法了

}

}

运行结果:

Compilationandnooutputatruntime

构造方法没有返回值,但是如果你在构造方法前加了void关键字,左边的程序将可以通过编译,也可以运行,但是没有输出Base.(很奇怪)

然而如果你将左边打*的行的注释去掉,则可以输出99,但没有输出Base.

调用有输出,

native修饰的方法没有方法体,用一个分号“;”代替大括号。

如:

staticnativevoidamethod();

staticvoidamethod(){}

▓一个文件只能有一个public类,而且文件名要以这个类命名

但是如果将public删除(即没有public方法了),程序仍然能正确运行而且有输出

1)staticmethodsdonothaveaccesstotheimplicitvariablecalledthis

静态方法不能存取隐式变量this

2)Astaticmethodmaybecalledwithoutcreatinganinstanceofitsclass

3)Astaticmethodmaynotbeoverridentobenon-static

静态方法不能重置为非静态方法

静态方法

main不是java关键字!

缺省构造函数没有返回类型

Interface中只有数据和方法的声明,它只是提供一个框架。

所以其中的方法不存在存取接口中定义的静态常量的问题。

4)Thesizeofastringcanberetrievedusingthelengthproperty

这句话是错误的,计算字符串的长度的length()是一个方法,不是property!

而数组则有一个length成员域,它不是方法!

,如int[]myarray=newint[3]

myarray.length返回myarray的长度

int[]array=newint[10];

array.length=15;//compileerror

数组的长度一旦确定就不能改变!

1.如果在一个方法中声明一个基本类型变量,那么在使用这个变量之前,它必须被赋值!

2.如果在类体中,方法之外定义基本类型变量,则可以不赋初值,系统自动采用该类型的缺省值;

3.对于基本数据类型的数组,无论是在方法中,还是在方法之外,如果未赋初值,系统都会为它赋相应基本类型的缺省值。

而如果数组是对象数组,则初值为null。

初值问题

非静态innerclassescannothavestaticdeclarations

non-staticinnerclasses不能有静态的方法、变量等。

内部类可以有任何的存取控制符例如protected,public,private.

Innerclass

classA{

publicstaticvoida(){

System.out.println("super!

");

}

}

classTestStaticextendsA{

publicstaticvoida(){

System.out.println("child!

");

}

publicstaticvoidmain(String[]args){

Aobj=newTestStatic();

System.out.println(obj);

obj.a();

}

}

有static,输出

TestStatic@1fcc69//可见obj是子类对象

super!

如果将static去掉,则输出(表示父类的同名方法被重置override了)

TestStatic@1fcc69

child!

 

按sun的说法,静态方法不能被override,只是被隐藏(hidden)了

yield()方法无参数,yield()只能使同优先级的线程有执行的机会

sleep(longmillis[,intnanos])方法有参数。

calltosupermustbefirststatementinconstructor!

而且,切记super方法只能在构造方法中写,其他方法中一概不能写!

1)Aprogramcansuggestthatgarbagecollectionbeperformedbutnotforceit

2)不同的java开发环境的垃圾处理机制不太一样。

garbagecollection

non-staticvariablecannotbereferencedfromastaticcontext

staticvariable

publicclassInc{

publicstaticvoidmain(Stringargv[]){

Incinc=newInc();

inti=0;

inc.fermin(i);

i=i++;

System.out.println(i);

}

voidfermin(inti){

i++;

}

}

 

睁大眼睛看仔细

结果是0!

!

对基本类型是传值,passacopy

Swicth语句中的判断条件必须是int和它以下的数据类型即short、char、byte

publicclassAgg{

staticpublicinti=10;//(*)

publicstaticvoidmain(Stringargv[]){

switch(i){

case1:

System.out.println("one");

default:

System.out.println("default");

case10:

System.out.println("ten");

}

}

}

publicclassTestswitch{

publicstaticvoidmain(String[]args){

intx=Integer.parseInt(args[0]);

switch(x){

case4:

System.out.println(4);

case3:

case2:

System.out.println

(2);

case1:

System.out.println

(1);

}

}

}

publicclassTestswitch{

publicstaticvoidmain(String[]args){

intx=Integer.parseInt(args[0]);

switch(x){

case1:

System.out.println

(1);

case2:

case3:

System.out.println(3);

case4:

System.out.println(4);

}

}

}

奇怪的switch!

1)如果有匹配的值,无论default预放哪里都没关系。

2)如果无匹配值,即,将case10去掉,则会执行default

3)如果将case1放到case10后,则case10及case1都会有输出!

4)如果i=4,输出:

default

ten

5)如果将default放case10后,输出

default

可见无匹配值时,从default语句开始往下都有输出,直到遇到break或结束。

5)总结:

从匹配的地方开始下面的语句都有输出,直到遇到break或程序结束。

这个匹配的地方包括default,参见第4点。

 

javaTestswitch3

输出

2

1

 

javaTestswitch1

1

3

4

原因是:

没有加break;语句!

没有break则从匹配的地方开始往下全部有输出!

只到遇到break

goto和const虽然是java关键字,但是目前还未用于Java语言。

构造方法不能加static关键字

Publicvoidinit(){

Threadt=newThread(){

//somecodes

};//匿名内部类象语句一样被定义,所以要加分号!

t.start();

}

创建了Thread的一个实例,其实是创建了Thread的子类的一个实例,这个子类我们并没有给他命名,但是我们已经给出了这个子类的定义。

匿名内部类没有构造方法!

Java隐式的调用其父类的构造方法!

InJava,anonymousclassesareoftenusedtoperformsimpleeventhandlingforuserinterface.

AnonymousClasses

Asyoucansee,thenewexpressionstatesthatitiscreatinganinstanceofclassThread.Actually,it’screatingasubclassofThreadthatwehavenotnamed,althoughwehavesuppliedadefinitionforthissubclass.

Anonymousclassescannothaveconstructors,Javainvokestheirsuperclassconstructorimplicitly.

publicclassTestinner{

intt=10;

publicvoida(){

finalintu=90;

classInMethod{//方法中内部类

InMethod(){//内部类的构造方法

System.out.println("u="+u);//封装方法内的变量必须是final

才能访问到!

System.out.println("t="+t);//外部类的变量可以任意访问!

}

}

newInMethod();

//必须在方法a()中创建内部类对象之后,

//Testinner对象才能通过a()访问到InMethod类

}

publicstaticvoidmain(String[]args){

Testinnert=newTestinner();

t.a();

}

}

方法中的内部类的演示程序

输出:

u=90

t=10

方法中的内部类不可以是static的!

如果一个内部类是静态的(当然只能是类中的内部类啦),那么这个类就自动的成为顶级(top-level)类即普通的类。

静态内部类中的方法(无论是静态的方法还是非静态的方法)只能直接访问外部类中的静态成员,要访问外部类中的非静态成员,则必须创建外部类的对象。

静态内部类的问题

staticinnerclass

<1>42e1是double型的。

<2>0x0123是int型的。

<3>GivenanActionEvent,howtoidentifytheaffectedcomponent?

用getSource()方法,记住!

(1.4不要求awt)

<4>StringBuffer中的方法是append,String中的方法是concat,并且,试图在其他方法中通过调用该方法改变String是徒劳的。

<5>system.exit(intvalue),也就是说只要是int都能使虚拟机退出,System.exit('a');同样的是合法的.

<6>whichfourtypesofobjectscanbethrownuse"throws"?

 A.Error B.Event C.Object D.Excption

 E.Throwable F.RuntimeException

Ansare:

ADEF

<7>whichtwoareequivalent?

 A. 3/2//1

 B. 3<2//false

 C. 3*4//12

 D. 3<<2//12

 E. 3*2^2//6^2=5

 F. 3<<<2(迷惑人的地方,并没有<<<操作符)

ans:

c,d

<8>& | 可以用在int和boolean上。

^(异或只能用在int上)。

&&||只能用在boolean上,作用同&|,但是与其不同在于&&||有短路运算,而位操作没有。

<9>HashtableimplementsMap,Cloneable,Serializible

<10>whichtwointerfacesprovidethecapabilitytostoreobjectsusingakey-valuepair?

 A.java.util.Map

 B.java.util.Set

 C.java.util.List

 D.java.util.SortedSet

 E.java.util.SortedMap

 F.java.util.Collection

Ans:

A,E

实例变量instancevariables和局部变量localvariables的区别:

1)实例变量能够在类定义的整个代码中使用(比如类中所有的方法中),他一般系统会自动为他赋缺省值;

2)局部变量则没有缺省值。

Methodinitisaspecialappletmethodthatisnormallythefirstmethoddefinedbytheprogrammerinanappletandisguaranteedtobethefirstmethodcalledineveryapplet.Methodinitiscalledonceduringanapplet’sexecution.Themethodnormallyinitializestheapplet’sinstancevariables(iftheyneedtobeinitializedtoavalueotherthantheirdefaultvalue)andperformsanytasksthatneedtobeperformedonceatthebeginningofanapplet’sexecution.

 

importjava.applet.Applet;

importjava.awt.*;

publicclassSampleextendsApplet{

privateStringtext="HelloWorld";

publicvoidinit(){

add(newLabel(text));

newSample("a");

}

publicSample(Strings){

add(newLabel("hahahahahah"));

}

}

==========================================================

classFirst{

publicFirst(Strings){

System.out.println(s);

}

//publicFirst(){}//加上这条语句则正常运行!

}//由于Second类初始化调用父类无参数的构造函数

publicclassSecondextendsFirst{

publicstaticvoidmain(Stringargs[]){

newSecond();

}

}

Applet中的publicvoidinit()方法

Applet中可以有构造函数

Init()中缺省调用无参构造函数(无论这个无参构造函数是系统提供的,还是用户自己写的),因此如果要写带参数的构造方法,那么用户必须显式的写出无参构造方法,因为用户自己写了有参构造方法之后,系统将不再提供无参构造方法,但是init()缺省一定要调用无参的构造方法,init()找不到无参的构造方法,这样在运行时将会出错。

左这种情况也是编译能够通过,但运行报错。

提示:

加载:

无法实例化Sample.class。

将newSample("a");去掉,将publicSample(Strings)改成无参publicSample(),则先输出hahahah,再输出HelloWorld,可见无参构造方法自动调用且是先执行的

==============

此程序则是编译错误!

不是到运行是才有错误

Second.java:

7:

cannotresolvesymbol

symbol:

constructorFirst()

location:

classFirst

publicclassSecondextendsFirst{

^

如果要调用无参数的的构造方法(已经定义了一些有参的构造方法),那么必须显式的写出无参构造方法。

publicclas

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

当前位置:首页 > 解决方案 > 商业计划

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

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