javaSE复习总结
之前匆匆忙忙学完了java,后来又接着学习ee,然而,越是想要快一点最后反而会更慢一点。因为匆忙间 我几乎什么都没学会。在后面的学习中实在非常吃力。就把javase
的视频大部分又重新看了一遍。真的收获挺大的。但是我有一个坏毛病,心浮气躁,还是在赶进度。于是好不容易理解的东西又快忘了。se已经复习完。赶快整理一下。
1、方法的重载:
方法的重载是方法名相同,方法的参数列表不同(参数的个数不同或者参数的类型不同,或者两者都不相同)。与返回值类型无关。
这里可以想到:类的有参和无参构造方法就用到了重载
2、方法的重写:
方法的重写是方法名和方法的参数都要相同。一般是子类继承父类后重写父类中的方法。
3、数组中的注意点:
声明数组仅仅给出了数组名字和元素的数据类型,要想真正使用数组还必须为它分配内存空间,即创建数组,为数组分配内存空间时必须指明数组的长度。
4、java的内存分配:
栈: 存放局部变量 (局部变量:在方法中定义的变量或者是方法声明上定义的变量) (栈中数据使用完毕就消失)
堆: 存放所有new出来的 (堆中 每一个new出来的东西都有地址,每一个变量都有默认值,byte short int long 默认值为0, float,double的引用值是0.0, char的引用值是'\u0000', boolean的引用值是false, 引用类型的默认值是null)----------------------数据使用完毕后在垃圾回收器空闲的时候回收。
方法区:方法区是线程共享的区域,用于存储已经被虚拟机加载的类信息,常量,静态变量和即时编译器(JIT)编译后的代码等数据
常量池是方法区的一部分
本地方法区: (系统相关)
寄存器: (CPU使用)
5、数组操作中的异常:
ArrayIndexOutOfBoundsException:数组索引越界异常
NullPointerException:空指针异常
6、java中的参数传递问题:
基本类型:形式参数的改变不影响实际参数(基本类型传递的是那个值)
引用类型:形式参数的改变直接影响实际参数(引用类型传递的是地址值)
class Demo{
public static void main(String[] args){
int a=10;
int b=20;
syso(a,b);
change(a,b);
syso(a,b);
int[] arr ={1,2,3,4,5};
change(arr);
syso(arr[1]);
}
public static void change(int a,int b){
syso(a,b);
a=b;
b=a+b; 
syso(a,b);
}
public static void change(int[] arr){
for(int x=0;x<arr.length;x++){
if(arr[x]%2==0){
arr[x]*=2;
}
}
}
}
7、成员变量和局部变量的区别:
在类中的位置不同:成员变量在类中方法外;局部变量在方法内或者方法的声明上
在内存中的位置不同:成员变量在堆中;局部变量在栈中
生命周期不同:成员变量随着对象的存在而存在,随着对象的消失而消失;局部变量随着方法的调用而存在,随着方法的调用完毕而消失
初始化值不同:成员变量有默认初始化值;局部变量没有初始化值,必须先定义,赋值才能使用*****************************这里测试一下在方法内的局部变量是
不是要先赋值(暂时还没测试)
8、成员变量的名称可以和局部变量一样。在使用的时候先找小范围再找大范围
9、匿名对象的两种使用方法:
在对象调用方法仅仅一次的时候使用
作为实际参数传递
10、private:(被private修饰的成员只有在本类中才能访问)
这里在后面经常用到,但是在没复习之前完全不知道是什么情况,一脸萌币!!!!!就是成员变量在用private私有之后外界无法访问,但是为了能够访问,提供了getXxxv()和setXxxx()方法
11、构造方法的作用:
作用是:给对象的数据进行初始化
12、Student s = new Student():做了哪些事情:
1)将Student.class文件加载到内存
2)在栈内存为s开辟空间
3)在堆内存为学生对象申请空间
4)给Student的成员变量进行默认初始化(eg:name:null age:0)
5)给Student的成员变量进行显示初始化(name:xx age:12)
6)通过构造方法给成员变量进行初始化(这里是带参构造)
7)对象构造完毕,把地址赋给s变量
13、static
a:可以修饰成员变量和成员方法
b:随着类的加载而加载
c:优先于对象而存在
d:被类的所有对象所共享
e:既可以通过对象名来调用也可以通过类名来调用
f:静态的内容在方法区的静态区
g:在静态方法中没有this对象(this代表当前类的引用对象,而静态是随着类的加载而加载的,那时候还没有this)
h:静态只能访问静态
14、静态变量和成员变量的区别:
所属不同:静态变量属于类,是类变量; 成员变量属于对象,对象变量,实例变量
内存中位置不同:静态变量在方法区的静态区; 成员变量在堆内存中
生命周期不同:静态变量是随着类的加载而加载,随着类的消失而消失; 成员变量,随着对象的创建而存在,随着对象的消失而消失
调用不同:静态变量可以通过对象名调用也可以通过类名调用,成员变量只能通过对象名调用。
15、Math类
没有构造方法,因为它的成员都是静态的
产生1--100之间的随机数:int number = (int)(Math.random()*100)+1;
16:代码块
局部代码块:用于限定变量的生命周期,及早释放,提高内存利用率
构造代码块:把多个构造方法中相同的代码块可以放到这里,每个构造方法执行之前,首先执行构造代码块***************************************不记得了
静态代码块:对类的数据进行初始化,仅仅执行一次
执行顺序:静态代码块>构造代码块>构造方法
17、继承:
java中类只支持单继承,但是可以有多重继承体系
接口可以继承多个接口
子类不能继承父类的私有成员
子类不能继承父类的构造方法,但是可以通过super去访问
18、子类的方法访问变量的查找顺序:
在子类的局部范围内找,有就使用
在子类的成员范围内找,有就使用
在父类的成员范围内找,有就使用
找不到就报错
19、
子类的构造方法默认会去访问父类的无参构造方法(是为了子类访问父类数据的初始化:因为子类会继承父类中的数据,可能还会使用父类中的数据,所以子类初始化前,一定要先完成父类数据的初始化)
父类中若没有无参构造,子类通过super去明确调用父类的带参构造(子类通过this调用本身的其他构造,但是一定会有一个去访问了父类的构造)
20、final
修饰类:类不能被继承
修饰成员变量:变量为常量,只能赋值一次
修饰方法:方法不能被重写
21、多态成员的访问特点:(记着孔子装爹的例子*)
成员变量:编译看左边,运行看左边
成员方法:编译看左边,运行看右边
静态方法:编译看左边,运行看左边(所以说静态方法的重写不能算方法的重写)
class Fu{
public int age = 40;
public void teach(){
syso("javaEE");
}
}
class Zi extends Fu{
public int age=10;
public void teach(){
syso("javaSE");
}
public void playGame(){
syso("game");
}
}
(向上转型)
Fu fu = new Zi();
syso(fu.age);--------40 成员变量编译和运行都看左边
syso(fu.teach);------javaSE 成员方法,编译看左边,运行看右边(这里只能调用Zi中的方法)
syso(fu.palyGame);X 这样是不行的,编译时无法通过,因为编译看左边,但是左边的Fu中没有palyGame方法
(向下转型)
Zi zi = (Zi)fu; ( 因为 Fu fu = new Zi(); 所以可以向下转 )
syso(zi.age);------10
syso(zi.teach);-----javaSE
syso(zi.playGame);---game
浙公网安备 33010602011771号