一: 简单零碎的知识汇总
1)java中定义类的简单语法如下:
其中修饰符可以是public,abstract, final或者完全省略这三个修饰符。
2)同一个类中定义顺序没有任何影响,各成员之间可以相互调用,但是static修饰的成员不能直接访问没有static修饰的成员
3)如果没有为类编写构造器,则使用默认构造器。
4)定义成员变量的语法格式如下:[修饰符] 类型 成员变量名 [ = 默认值]
其中修饰符可以省略,也可以是public,protected,private,static,final。
5)定义方法的语法格式如下
其中修饰符可以省略,也可以是public,protected,private,static,final,abstract。其中final和abstact只能出现一个。
6)命名规则:
类名:一个或多个单词连缀而成,每个单词首字母大写,单词之间不要任何分隔符。
成员变量名和方法名:一个或多个单词连缀而成,第一个单词首字母小写,其余单词首字母大写,单词之间不要任何分隔符
7)static修饰的成员变量和方法称作类变量,类方法。不使用static修饰的普通方法,成员变量则属于该类的单个实例,也称作实
例变量,实例方法。
8)定义构造器的语法格式如下:
其中修饰符可以省略,也可以是public,protected,private其中之一。
构造器不能定义返回值类型,且构造器名必须与类名相同。一旦定义返回值类型(包括使用void),构造器就成了方法。
9)static定义的变量和方法,既可以通过类名来调用,也可以通过实例来调用;没有使用static的变量和方法只能通过实例调用。
10)this关键字总是指向调用该方法的对象,根据this出现的位置不同,this作为对象的默认引用有两种情形。
1.构造器中引用该构造器正在初始化的对象
2.在方法中引用调用该方法的对象
11)java允许一个成员直接调用另外一个成员,可以省略this前缀。如果调用static修饰的成员时省略了前面的主调,那么默认使
用该类作为主调;如果调用没有static修饰的成员时省略了前面的主调,那么默认使用this作为主调。
下面程序演示了静态方法直接访问非静态方法时引发的错误:
12)Java中方法的参数传递方式只有一种:值传递。所谓值传递,就是将实际参数值的副本(复制品)传入方法内,而参数本
身不会受到任何影响。
13)定义方法时,在最后一个形参的类型后增加三个点(...),则表明该形参可以接受多个参数值。下面程序定义了一个形参个数 可变的方法
14)递归一定要向已知方向递归,
例1.已知,f(0)=1,f(1)=4,f(n+2)=2*f(n+1)+f(n)。求f(10)。此时递归语句如下:
例2.已知f(20)=1,f(21)=4,f(n+2)=2*f(n+1)+f(n)。求f(10)。此时递归语句如下:
15)方法重载的要求是两同一不同,即同一个类,同一个方法名,不同参数列表。方法的其他部分,如返回值类型,修饰符等,
与方法重载没有关系。
16)
17)成员变量无需显式初始化,默认初始化时的赋值规则与数组动态初始化时数组元素的赋值规则完全相同。
局部变量除形参外,都必须显式初始化。
18)Java允许局部变量和成员变量同名,如果方法里的局部变量和成员变量同名,局部变量会覆盖成员变量,如果需要在方法中
引用被覆盖的成员变量,则可使用this(对于实例变量)或类名(对于类变量)作为调用者来限定访问成员变量。
19)
20)
二 :易混淆出错的难点汇总
1) Person p=new Person();
下图显示了Person对象在内存中存储示意图
:
下图显示将Person对象赋给一个引用变量的示意图
2)为什么static修饰的静态成员不能直接访问非静态成员?
答:因为对于 static 修饰的方法 ,则可以使用类来直接调用该方法,如果在 static 修饰的方法中使用 this 关键字, 则这个关键
字就无法指向合适的对象 所以,static修饰的方法不能使用this引用,所以static修饰的方法不能访问不使用static修饰的普通成
员,因此java语法规定: static修饰的静态成员不能直接访问非静态成员。
3)方法中的参数进行值传递时,什么情况下参数本身会发生变化?
答:如下代码段,参数本身值不变。
原因如下:
如下代码段中,参数值本身发生了变化:
原因如下
4)成员变量初始化和内存中的运行机制:
对于如下代码
其中name为实例变量,eyeNum为类变量
每一步的存储示意图如下:
系统会在第一次使用Person类时加载这个类,并初始化这个类。在类的准备阶段,系统将会为该类的类变量分配内存空间,并指定默认初始值。从图5.10可以看出,当Person类初始化完成后,系统将在堆内存中为Person分配一块内存区(当Person类初始化完成后,系统会为Person类创建一个类对象),在这块内存区里包含了保存eyeNum类变量的内存,并默认初始值为0。
5)