java面向对象程序设计基础知识总结Word格式.docx
《java面向对象程序设计基础知识总结Word格式.docx》由会员分享,可在线阅读,更多相关《java面向对象程序设计基础知识总结Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
4字节/short:
2字节/long:
8字节)、浮点数(float:
4字节/double:
8字节)、字符型(char:
2字节)、布尔型(boolean:
1字节)。
5、整形变量注意:
16进制数以0x开头,8进制数以0开头。
6、浮点型变量注意:
如果数字未加任何字母,则默认为double类型,赋值时须注意数据类型匹配问题。
7、数组的定义:
chararray1[];
和char[]array2;
都可以。
8、双目运算符:
+-*/对于整形和浮点数有效(floatx=1f/3f;
的运行结果是x=0.),但%只对整形运算。
9、逻辑运算符:
逻辑运算是对布尔型变量进行运算,结果也是布尔型。
^表示异或运算(a^b表示a和b真假不同时,值为真)。
&
和||是短路的(对于a&
b,如果a为假,则不再计算b的值),&
和|是非短路的,a和b的值都要计算。
10、位运算符:
位与、|位或、~位反、^位异或、<
<
左移、>
>
右移、>
无符号右移(忽略了符号位扩展,0补最高位)。
11、位运算注意:
JAVA进行移位运算中因为int是占32位,进行移位的数是32的模,long占8字节也就是64位,所以移位的数是64的模,byte、short进行右移位运算,会自动转换成int类型。
12、左移运算:
value<
num:
左移num位,丢弃最高位,0补最低位,如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模(根据被移位数的类型而定模的大小)。
运算规则:
a.当左移的运算数是int类型时,每移动1位它的第31位就要被移出并且丢弃;
b.当左移的运算数是long类型时,每移动1位它的第63位就要被移出并且丢弃。
c.当左移的运算数是byte和short类型时,将自动把这些类型扩大为int型。
d.在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方
13、右移运算:
value>
符号位不变,左边补上符号位;
a.按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1;
b.当右移的运算数是byte和short类型时,将自动把这些类型扩大为int型。
14、三目运算符(条件表达式):
x?
y:
z;
表示x为真时,表达式的值是y的值,否则取z的值。
intx=1,y=2,z=3;
inti=x<
0?
则i的取值就是3.
15、java中提供了四种转移语句:
break、continue、return、throw
break:
在Java中,break语句有3种作用。
第一,你已经看到,在switch语句中,它被用来终止一个语句序列。
第二,它能被用来退出一个循环。
第三,它能作为一种“先进”的goto语句来使用(breaklabel;
标签label是标识代码块的标签。
当这种形式的break执行时,控制被传递出指定的代码块。
被加标签的代码块必须包围break语句,但是它不需要是直接的包围break的块。
这意味着你可以使用一个加标签的break语句退出一系列的嵌套块。
但是你不能使用break语句将控制传递到不包含break语句的代码块)。
16、continue:
类似break,不带标签的continue是终止当前循环结构,转而直接进入下一轮循环。
而continuelabel;
则是把程序直接转到label所指向的那一个循环结构的下一轮循环,而不管被它嵌套的及continue语句所在的循环结构运行到了哪一轮。
17、方法的调用及参数的传递:
一个是传值(要求实际参数必须是简单类型的变量),一个是传递地址(数组)。
18、类与对象:
类是对对象的抽象,而对象是对类的具体化或实例化。
19、类头说明:
类名第一个字母大写并体现该类的功能或特征。
类的修饰符分两种:
一是访问控制符,如public;
一是类型说明符,类型说明符只有两个:
abstract和final。
20、类的访问控制符:
一个是public,可以被所有的类访问和引用,其他包用import语句引入后可调用;
一个是默认的,也就是没有控制符,也称为友好的friendly,包中的类能用——而不能被其他包中的类访问或使用(import引入也不行)。
注意:
import语句引入的类必须是public修饰的类,Java规定一个.java文件可以有多个类,但必须有一个而且最多有一个public类,因而文件中的其他类只能是友好访问控制符。
21、属性和方法的访问控制符:
public、private(私有访问控制符,只能被该类自身所访问或调用)、protect(保护访问控制符,它可被同一个包中的其他类、不同包中的该类的子类及自身调用)、privateprotect(只能被该类自身及该类的子类访问和引用)、默认访问控制符(具有包内访问性,只能被同一个包中的其他类访问或引用,不在同一个包中的类不能访问它,即使用import语句引入也不行)
22、static:
只能修饰属性和方法,修饰的属性和方法不用实例化,可以用类直接调用。
23、多个修饰符放在一起使用:
abstract不能与final共同修改一个类;
abstract不能与private,static,final和native共同修饰一个方法;
abstract类中不能有私有属性和方法。
24、另一种创建对象的方法:
假设一个类名为Text,它有一个方法名为print(),则可以直接用下面的语句创建对象并其方法:
newText().print();
不过这个对象是无名,所以不能被再次调用。
25、构造函数:
构造函数名字必须与类名完全相同,没有返回值也不用void指明,还可以通过重载实现不同的初始化方法。
26、Java允许类的嵌套:
因此类的默认访问控制符有两个:
一个是友好类default,一个是类中类,一个友好类编译后能后生一个独立的.class文件,如Input.class,而类中类却产生Judge$Imput.class,所以只能被包含它的类使用。
27、命令行参数:
main()方法是通过Stringargs[]这个字符串数组来接收命令行参数的。
28、继承:
一个子类只能继承一个父类,这样继承关系就形成了一棵树。
继承能够使子类拥有父类非私有的属性和方法。
子类通过super来调用父类的属性和方法。
29、多态:
指一棵继承树的类中可以有多个同名但不同方法体以及不同形参的方法。
分两种情况——覆盖和重载。
覆盖是在子类中直接定义和父类同样的属性和方法,而重载是指在同一个类定义中有多个同名的方法,但有不同的形参。
覆盖:
子类与父类的关系,是在子类中直接定义和父类同样的属性和方法,但重新编写了方法体,即子类与父类的形参与返回值都相同,但内部处理不同。
通过调用它的对象来决定调用哪个方法。
重载:
同一个类内部多个方法间的关系,是指在同一个类定义中有多个同名的方法,但不同的形参,而且每个方法有不同的方法体,调用时根据形参的个数和类型来决定调用的是哪个方法。
通过形参表来决定调用哪个方法。
30、在Java技术中,另一个必须要求有重载存在的原因是构造函数。
31、继承了父类的属性表示子类被创建时另外开辟了新的空间来存储从父类继承而来的属性,其初值应该是父类中属性的初值,但之后双方的相同属性彼此相互独立。
32、final修饰的方法不能被子类覆盖,但可以被重载。
abstract修饰的方法必须被子类覆盖。
33、this的使用:
this关键字(只能在方法内部使用)可以为调用了自己的方法的那个对象生成相应的地址,可以像对待其他任何对象地址一样对待。
publicclassLeaf{
privateinti=0;
Leafincrement(){
i++;
returnthis;
//将当前对象的地址作为返回值返回
}
voidprint(){
System.out.println("
i="
+i);
}
publicstaticvoidmain(String[]args){
Leafx=newLeaf();
x.increment().increment().increment().print();
//多次调用方法//increment(),返回的都是对象x的地址,i值表示调用次数
34、super的作用:
它并不是父类对象的地址,它专门用来指代父类,也就是说super的含义是被修饰的属性和方法将使用父类的定义,而非子类本身的定义,因此子类的对象想使用它父类中的同名属性和方法时,就可以使用super。
35、构造函数:
如果定义了多个构造函数,创建对象时必须使用其中之一,因为系统不再定义默认的空构造函数了。
构造函数的简化(调用):
用构造函数间的调用可以实现定义的简化,就是先调用定义好的构造函数完成部分属性的初始化,再加上其他属性的赋值。
privateStringlname;
privateintlnum;
Leaf(intnum){
lnum=num;
Leaf(int$num,String$name){
this($num);
//调用上一个构造函数,等同于lnum=$num;
lname=$name;
}
Leafx=newLeaf(20,"
good"
);
lnum="
+x.lnum+"
lname="
+x.lname);
Leafy=newLeaf(22);
lnum="
+y.lnum);
调用其他构造函数时,必须加上this代替函数名,但这时的this不代表地址,只用来表示构造函数的名称,也就是类名;
注意要在实际参数名前加上$作为开参名,这样既区别于实际参数名,又能反映形参的含义。
构造函数的继承:
A、子类只能继承父类的默认构造函数,即无形参构造函数,并且在创建对象时先调用这个构造函数对对象进行初始化,再调用子类自己定义的构造函数。
B、如果父类没有默认构造函数,子类将不能从父类继承到任何构造函数,并且子类也不能定义自己的无参数构造函数。
C、如果子类想调用父类的非默认构造函数,必须使用super来实现。
例如调用父类的构造函数并加入自己的定义:
NormalStudent($stuFlag,$sName,$sSex,$reduceFlag){
super($stuFlag,$sName,$sSex);
//此处调用的是父类的构造函数对形参$stuFlag,$sName,$sSex初始化。
reduceFlag=$reduceFlag;
D、子类的构造函数的形参表只能使用父类构造函数中用过的形参表,或者是对它的扩展