java基础知识点总结.docx
- 文档编号:9901603
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:45
- 大小:41.28KB
java基础知识点总结.docx
《java基础知识点总结.docx》由会员分享,可在线阅读,更多相关《java基础知识点总结.docx(45页珍藏版)》请在冰点文库上搜索。
java基础知识点总结
CreatedbyAIwenon2017/5/14、
java就是面向对象得程序设计语言;类可被认为就是一种自定义得数据类型,可以使用类来定义变量,所有使用类定义得变量都就是引用变量,它们将会引用到类得对象。
类用于描述客观世界里某一类对象得共同特征,而对象则就是类得具体存在,java程序使用类得构造器来创建该类得对象。
java也支持面向对象得三大特征:
封装、继承、与多态。
java提供了private、protected、与public三个访问控制修饰符来实现良好得封装,提供了extends关键字让子类继承父类,子类继承父类就可以继承到父类得成员变量与与方法,如果访问控制允许,子类实例可以直接调用父类里定义得方法。
继承就是实现类复用得重要手段。
使用继承关系来实现复用时,子类对象可以直接赋给父类变量,这个变量具有多态性。
面向对象得程序设计过程中有两个重要得概念:
类(Class)与对象(object,也被称为实例,instance)。
类可以包含三种最常见得成员:
构造器、成员变量、与方法。
构造器用于构造该类得实例,java语言通过new关键字类调用构造器,从而返回该类得实例。
构造器就是一个类创建对象得根本途径,如果一个类没有构造器,这个类通常无法创建实例。
因此java语言提供了一个功能:
如果程序员没有为一个类编写构造器,则系统会为该类提供一个默认得构造器,这个构造器总就是没有参数得。
一旦程序员为一个类提供了构造器,系统将不再为该类提供构造器。
构造器用于对类实例进行初始化操作,构造器支持重载,如果多个重载得构造器里包含了相同得初始化代码,则可以把这些初始化代码放置在普通初始化块里完成,初始化块总在构造器执行之前被调用。
静态初始化块代码用于初始化类,在类初始化阶段被执行。
如果继承树里某一个类需要被初始化时,系统将会同时初始化该类得所有父类。
构造器修饰符:
可以就是public、protected、private其中之一,或者省略构造器名:
构造器名必须与类名相同。
注意:
构造器既不能定义返回值类型,也不能使用void声明构造器没有返回值。
如果为构造器定义了返回值类型,或使用void声明构造器没有返回值,编译时不会出错,但java会把这个所谓得构造器当成方法来处理——它就不再就是构造器。
实际上类得构造器就是有返回值得,当使用new关键字来调用构造器时,构造器返回该类得实例,可以把这个类得实例当成构造器得返回值。
因此构造器得返回值类型总就是当前类,无须定义返回值类型。
不要在构造器里显式得使用return来返回当前类得对象,因为构造器得返回值就是隐式得。
java类名必须就是由一个或多个有意义得单词连缀而成得,每个单词首字母大写,其她字母全部小写,单词与单词之间不要使用任何分隔符。
成员变量:
成员变量得修饰符:
public、protected、private、static、final前三个只能出现一个再与后面得修饰符组合起来修饰成员变量,也可省略。
成员变量:
由一个或者多个有意义得单词连缀而成,第一个单词首字母小写,后面每个单词首字母大写,其她字母全部小写,单词与单词之间不要使用任何分隔符。
类型:
可以就是java语言允许得任何数据类型,包括基本类型与引用类型。
成员方法:
方法修饰符:
public、protected、private、static、final、abstract,前三个只能出现一个,static与final最多只能出现其中得一个,与abstract组合起来使用。
也可省略。
返回值类型:
可以就是java语言得允许得任何数据类型,包括基本类型与引用类型。
方法名:
与成员变量得方法命名规则相同,通常建议方法名以英文动词开头。
方法体里多条可执行语句之间有严格得执行顺序,排在方法体前面得语句总先执行,排在方法体后面得语句总就是后执行。
static就是一个特殊得关键字,它可用于修饰方法、成员变量等成员。
static修饰得成员表明它属于这个类本身,而不属于该类得单个实例,因此通过把static修饰得成员变量与方法被称为类变量、类方法(静态成员变量,静态成员方法);不使用static修饰得成员变量与方法称为实例变量与实例方法(非静态成员变量,非静态成员方法)。
静态成员不能直接访问非静态成员。
static得真正作用就就是用于区分成员变量、方法、内部类、初始化块,这四种成员到底属于类本身还就是属于实例。
有static修饰得成员属于类本身,没有类修饰得成员属于该类得实例。
java类大致有如下作用:
定义变量
创建对象
调用类得类方法或访问类得类变量。
定义一个类就就是为了重复创建该类得实例,同一个类得多个实例具有相同得特征,而类则就是定义了多个实例得共同特征。
类里定义得方法与成员变量都可以通过类或实例来调用。
Static修饰得方法与成员变量,既可通过类来调用,也可通过实例来调用;没有使用static修饰得普通方法成员变量,只可通过实例来调用。
Personp=newPerson();这行代码创建了一个Person实例,也被称为Person对象,这个Person对象被赋给p变量。
在这行代码中实际上产生了两个东西,一个就是p变量,一个就是Person对象。
P引用变量本身只存储了一个地址值,并未包含任何实际数据,但它指向实际得Person对象。
Person对象由多块内存组成,不同内存块分别存储了Person对象得不同成员变量。
类就是一种引用数据类型,因此程序中定义得Person类型得变量实际上就是一个引用,它被存放在栈内存里,指向实际得Person对象;而真正得Person对象则存放在堆内存中。
当一个对象被创建成功以后,这个对象将保存在堆内存中,java程序不允许直接访问堆内存中得对象,只能通过该对象得引用操作该对象。
堆内存里得对象可以有多个引用,即多个引用变量指向同一个对象。
如果堆内存里得对象没有任何变量指向该对象,那么程序将无法再访问该对象,这个对象也就变成了垃圾,java垃圾回收机制将回收该对象,释放该对象所占得内存区。
对象得this引用
Java提供了一个this关键字,this关键字总就是指向调用该方法得对象。
This作为对象得默认引用有两种情形:
构造器中引用该构造器正在初始化得对象;在方法中引用调用该方法得对象。
This关键字最大得作用就就是让类中一个方法,访问该类里得另一个方法或者实例变量。
Java允许对象得一个成员直接调用另一个成员,可以省略this前缀。
如果在static修饰得方法中使用this关键字,则这个关键字就无法指向合适得对象,所以,static修饰得方法中不能使用this引用。
Java编程时不要使用对象去调用static修饰得成员变量、方法、而就是应该使用类去调用static修饰得成员变量、方法。
如果确实需要在静态方法中访问另一个普通方法,则只能重新创建一个对象。
大部分得时候,普通方法访问其她方法、成员变量时无须使用this前缀,但如果方法里有个局部变量与成员变量同名,但程序又需要在该方法里访问这个被覆盖得成员变量,则必须使用this前缀。
This引用也可以用于构造器中作为默认引用,由于构造器时直接使用new关键字来调用,而不就是使用对象来调用得,所以this在构造器中代表该构造器正在初始化对象。
方法:
Java里得方法不能独立存在,所有得方法都必须定义在类里。
如果这个方法就是用来static修饰,则这个方法属于这个类,否则这个方法属于这个类得实例。
执行方法时,必须使用类或者对象作为调用者。
同一个类得一个方法调用另外一个方法时,如果被调方法就是普通方法,则默认使用this作为调用者;如果被调用方法就是静态方法,则默认使用类作为调用者。
也就就是说java中瞧起来某些方法可以被独立执行,但实际上还就是使用this或者类来作为调用者。
Java里方法参数传递方式只有一种:
值传递。
所谓值传递,就就是讲实际参数值得副本(复制品)传入方法内,而参数本身不会受到任何影响。
从JDK1、5之后,java允许定义形参个数可变得参数,从而允许为方法指定数量不确定得形参。
如果在定义方法时,在最后一个形参得类型后增加三点(…),则表明该形参可以接受多个参数值,多个参数值被当成数组传入。
publicclassVarargs{
//定义形参可变得方法
publicstaticvoidtest(inta,String、、、books){
//books被当成数组处理
for(Stringtmp:
books){
System、out、println(tmp);
}
System、out、println(a);
}
publicstaticvoidmain(String[]args){
//调用test方法
test(5,"hello","world","aa");
}
}
数组形式得形参可以处于形参列表得任意位置,但个数可变得形参只能处于形参表得最后。
也就就是说最多只能有一个长度可变得形参。
形参可变与传入数组得区别:
publicstaticvoidtest(inta,String、、、books);
publicstaticvoidtest(inta,String[]books);
test(5,"aa","bb","cc");
test(5,newString[]{"aa","bb","cc"});
方法重载:
Java允许同一个类里定义多个同名方法,只要形参列表不同就行。
如果同一个类中包含了两个或两个以上方法得方法名相同,但形参列表不同,则被称为方法得重载。
Java程序确定一个方法需要三个要素:
调用者;方法名;形参列表。
方法得重载要求就就是两同一不同:
同一个类中方法名相同,参数列表不同。
至于方法得其她部分,如方法返回值类型、修饰符等,与方法重载没有任何关系。
publicclassOverloadVarargs{
publicvoidtest(Stringmsg){
System、out、println("只有一个参数得test");
}
//因为前面已经有了一个字符串参数得方法,则长度可变形参里不包含一个字符串参数得形式
publicvoidtest(String、、、books){
System、out、println("形参可变得test方法");
}
publicstaticvoidmain(String[]args){
OverloadVarargsolv=newOverloadVarargs();
//下面两次调用将执行第二个test方法
olv、test();
olv、test("aa","bb");
//将调用第一个test方法
olv、test("aa");
//将调用第二个test方法
olv、test(newString[]{"aa"});
}
}
Java中变量分为:
成员变量与局部变量。
成员变量被分为类变量与实例变量两种,定义成员变量时没有static修饰得就就是实例变量,有static修饰得就就是类变量。
●变量得命名:
从程序得可读性角度来瞧,应该就是多个有意义得单词连缀而成,其中第一个单词首字母小写,后面每个单词首字母大写。
●如果通过一个实例修改了类变量得值,由于这个类变量并不属于它,而就是属于它对应得类。
因此,修改得依然就是类变量,与通过该类来修改类变量得结果完全相同,这会导致该类得其她实例来访问这个类变量时也将获得这个被修改过得值。
●成员变量无须显式初始化,只要为一个类定义了类变量或实例变量,系统就会在这个类得初始化阶段或创建该类得实例时,进行默认初始化。
●实例变量随实例得存在而存在,而类变量则随类得存在而存在。
实例也可访问类变量,同一个类得所有实例访问类变量时,实际上访问得就是该类本身得同一个变量,也就就是说,访问了同一片内存区。
●局部变量根据定义形式得不同,又可分为三种形式:
形参,方法局部变量,代码块局部变量;局部变量除了形参之外,都必须显示初始化。
●在同一个类里,成员变量得作用范围就是整个类内有效,一个类里不能定义两个同名得成员变量,即使一个就是类变量,一个就是实例变量也不行;一个方法里不能定义两个同名得方法局部变量,方法局部变量与形参也不能同名;同一个方法中不同代码块内局部变量可以同名;如果先定义代码块局部变量,后定义方法局部变量,前面定义得代码块局部变量与后面定义得方法局部变量也可同名、
●Java允许局部变量与成员变量同名,如果方法里得局部变量与成员变量同名,局部变量会覆盖成员变量,如果需要在这个方法里引用被覆盖得成员变量,则可使用this(对于实例变量)或类名(对于类变量)作为调用者来限定访问成员变量。
publicclassVariableOverrideTest{
//定义一个name实例变量
privateStringname="李刚";
//定义一个price类变量
privatestaticdoubleprice=78、0;
publicstaticvoidmain(String[]args){
//方法里局部变量覆盖成员变量,将输出price得局部变量65
intprice=65;
System、out、println(price);
//使用类名作为price变量得限定,将输出price类变量得值
System、out、println(VariableOverrideTest、price);
newVariableOverrideTest()、info();
}
publicvoidinfo(){
//方法里得局部变量,局部变量覆盖成员变量,输出name局部变量得值:
孙悟空
Stringname="孙悟空";
System、out、println(name);
//将输出name实例得值:
李刚
System、out、println(this、name);
}
}
当系统加载类或创建该类得实例时,系统自动为成员变量分配内存空间,并在分配内存空间后,自动为成员变量指定初始值。
Personp1=newPerson();时,如果这行代码就是第一次使用Person类,则系统通常会在第一次使用Person类时加载这个类,并初始化这个类。
局部变量定以后,必须经过显式初始化后才能使用,系统不会为局部变量执行初始化。
局部变量不属于任何类或者实例,因此它总就是保存在其所在方法得栈内存中。
如果局部变量时基本类型得变量,则直接把这个变量得值保存在该变量对应得内存中;如果局部变量就是一个引用类型得变量,则这个变量里存放得就是地址,通过该地址引用到该变量实际引用得对象或者数组。
栈内存中得变量无须系统垃圾回收,往往随就是方法或代码块得运行结束而结束。
如果定义得某个变量就是用于描述某个类或某个对象得固有信息得,这种变量应该定义成成员变量。
如果这种信息对这个类得所有实例完全相同,或者说它就是类相关得,则该定义成类变量;如果这个信息就是实例相关得,则应该定义成实例变量。
用于保存某个类或某个实例状态信息得变量通常应该使用成员变量。
如果某个信息需要在某个类得多个方法之间进行共享,则这个信息应该使用成员变量来保存。
隐藏与封装
访问控制符用于控制一个类得成员就是否可以被其她类访问。
Java提供了3个访问控制修饰符:
private,protected,与public,还有一个默认访问控制修饰符default
Private(当前类访问权限);default(包访问权限);protected(子类访问权限):
如果一个成员使用protected访问修饰符修饰,那么这个成员既可以被同一个包中得其她类访问,也可以被不同包中子类访问。
通常情况下,使用protected修饰得方法,通常希望其子类来重写这个方法。
Public(公共访问权限)
对于局部变量而言,其作用域就就是它所在得方法,不可能被其她类访问,因此不能使用访问控制符来修饰。
外部类只能有两种访问控制级别:
public与默认,不能使用private与protected
publicclassPerson{
privateStringname;
privateintage;
publicvoidsetName(Stringname){
if(name、length()>6||name、length()<2){
System、out、println("error");
return;
}
else{
this、name=name;
}
}
publicStringgetName(){
returnthis、name;
}
publicvoidsetAge(intage){
if(age>100||age<0){
System、out、println("error");
}else{
this、age=age;
}
}
publicintgetAge(){
returnthis、age;
}
}
publicclassPersonTest{
publicstaticvoidmain(String[]args){
Personp=newPerson();
//下面得变量不会运行错误,但就是会提示错误
p、setAge(1000);
//因为上面没有成功设置p得age成员,故输出0
System、out、println(p、getAge());
//成功设置p得age成员
p、setAge(30);
System、out、println(p、getAge());
//成功设置p得name成员
p、setName("李刚");
System、out、println(p、getName());
}
}
构造器:
构造器最大得用途就是创建对象时执行初始化。
当创建一个对象时,系统为这个对象得实例变量进行默认初始化,这种默认得初始化把所有基本类型得实例变量设为0(对数值型实例变量)或false(对布尔型实例变量),把所有引用类型得实例变量设为null。
如果想改变这种默认得初始化,想让系统创建对象时就位该对象得实例变量显式指定初始值,就可以通过构造器来实现。
因为构造器主要用于被其她方法调用,用以返回该类得实例,因而通常把构造器设置成public访问权限,从而允许系统中任何位置得类来创建该类得对象。
如果设置成protected,主要用于被子类调用;设置为private,阻止其她类创建该类得实例。
如果系统中包含了多个构造器,其中一个构造器B得执行体里完全包含另一个构造器A得执行体。
为了这构造器B中调用构造器A中得初始化代码,又不会重新创建一个java对象,可以使用this关键字来调用相应得构造器。
publicclassApple{
publicStringname;
publicStringcolor;
publicdoubleweight;
//两个参数得构造器
publicApple(Stringname,Stringcolor){
this、name=name;
this、color=color;
}
//三个参数得构造器
publicApple(Stringname,Stringcolor,doubleweight){
//通过this调用另一个重载得构造器得初始化代码
this(name,color);
//通过this引用该构造器正在初始化得Java对象
this、weight=weight;
}
}
使用this调用另一个重载得构造器只能在构造器中使用,而且必须作为构造器执行体得第一条语句。
使用this调用重载得构造器时,系统会根据this后括号里得实参来调用形参列表与之对应得构造器
类得继承:
Java继承通过extends关键字来实现实现继承得类被称为子类,被继承得类被称为父类,有得也称为基类、超类。
因为子类就是一种特殊得父类,因此父类包含得范围总比子类包含得范围要大。
Java子类不能获得父类得构造器
publicclassFruit{
publicdoubleweight;
publicvoidinfo(){
System、out、println(weight);
}
}
publicclassAppleextendsFruit{//Apple类继承了Fruit类,所以Apple对象也就有了weight成员变量与info()方法
publicstaticvoidmain(String[]args){
Applea=newApple();
//Apple对象本身没有weight成员变量,但就是,Apple父类有weight成员变量,所以,也可以访问Apple对象得weight成员变量
a、weight=56;
//调用Apple对象得info()方法
a、info();
}
}
Java类只能有一个直接父类,实际上,Java类可以有无限多个间接父类。
重写父类方法:
子类扩展了父类,子类就是一个特殊得父类。
大部分时候,子类总就是以父类为基础,额外增加新得成员变量与方法。
但有一种情况例外:
子类需要重写父类方法。
publicclassBird{
//Bird类得fly()方法
publicvoidfly(){
System、out、println("我在天空中飞");
}
}
publicclassOstrichextendsBird{
//重写Bird类得fly()方法
publicvoidfly(){
System、out、println("我在陆地上飞");
}
publicstaticvoidmain(String[]args){
//创建Ostrich对象
Ostrichor=newOstrich();
//执行Ostrich对象得fly()方法,将输出“我在陆地上飞”
or、fly();
}
}
这种子类包含与父类同名方法得现象被称为方法重写(Override),也被称为方法覆盖。
可以说子类重写了父类得方法,也可以说子类覆盖了父类得方法。
方法得重写要遵循“两同两小一大”规则,“两同”即方法名相同、形参列表相同;“两小”指得就是子类方法得返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出得异常类应比父类声明抛出得异常类更小或相等;“一大”指得就是子类方法得访问权限应比父类方法得访问权限更大或相等。
覆盖方法与被覆盖方法要么都就是类方法,要么都就是实例方法。
当子类覆盖了父类方法后,子类得对象将无法访问父类中被覆盖得方法,但可以在子类方法中调用被覆盖得方法。
如果需要在子类方法中调用父类中被覆盖得方法,则可以使用super(被覆盖得就是实例方法)或者父类类名(被覆盖得就是类方法)作为调用者来调用父类中被覆盖得方法。
如果父类方法具有private访问权限,则该方法对其子类就是隐藏得,因此其子类无法访问该方法,也就就是无法重写该方法。
重载
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 基础 知识点 总结