文章目录
- 一、类和对象
- 二、数组工具类的常用方法
一、类和对象
1、对象没人引用时,会被自动回收
2、对象一定在堆上,引用变量不一定在栈上
3、this表示当前对象的引用,谁调用eat方法(eat方法里有this),谁就是this。this.data访问当前对象的属性,this.func()访问当前对象的方法
4、初始化对象成员变量和给对象成员变量赋值的区别,运用构造方法(该方法没有返回值类型,方法名和类名相同)初始化对象成员变量。用this()调用当前类当中的其它构造方法,()中可有参数,看()中的参数匹配到哪个构造方法则调用哪个构造方法,只能在当前的构造方法内部使用,只能放在第一行。可用idea生成构造方法,鼠标右击找到Generate,再点击Constructor
5、类中没有package语句,则该类被放到一个默认的包中,这个默认的包是src。default(默认包访问权限),如成员变量前没有加访问修饰限定符,同一个包下的不同类之间可以相互访问这个成员变量(这个是default的最大访问权限)
6、静态成员变量和静态成员方法(static修饰,也叫类变量和类方法,static不能修饰局部变量),通过类调用(类.×××),不依赖于对象。静态方法内部不能直接调用非静态成员方法(调用则要new一个对象,再通过对象的引用调用)或者直接调用非静态成员变量,static修饰的方法里面不能使用this,因为静态成员变量和静态成员方法不依赖于对象,而this是当前对象的引用。非静态方法内部能直接调用静态成员方法。非静态方法之间可以直接调用。
7、成员变量(属性、字段),成员方法(行为)。
8、静态成员变量一般不放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性。用静态代码块(static加花括号)对静态成员变量进行初始化,静态代码块在类里面,方法外面。先执行静态代码块,再执行构造代码块(实例代码块),再执行构造方法,静态代码块只执行一次。静态代码块只要类被加载就会被执行,构造代码块(实例代码块)实例化对象的时候才会被执行。
class Student{
private String name;
private String gender;
private static String classRoom;
//实例代码块
{
this.name = "ZhangSan";
this.gender = "man";
System.out.println("instance");
}
//静态代码块
static {
classRoom = "4";
System.out.println("static");
}
public Student(){
System.out.println("Student init");
}
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
}
}
9、package语句用于说明本文件处于哪个包当中
10、实例化对象时。父类静态代码块先于子类静态代码块执行,静态代码块先执行且只执行一次;然后执行父类构造代码块(实例代码块)和父类构造方法;最后执行子类构造代码块(实例代码块)和子类构造方法。先执行父类和子类静态的,再执行父类的实例和父类的构造,最后执行子类的实例和子类的构造
11、final修饰变量后,变量变成常量,常量不能被修改,如final修饰数组名,则数组名这个引用变量中存储的值(地址)不能被修改;final修饰的类叫密封类,密封类不能被继承
12、protected修饰,访问不同包之间的子类(这个是protected的最大访问权限)
13、组合:如在一个类当中用其它类作为类型定义变量(在类中用别的类型的对象作为成员)。能用组合尽量用组合
14、实例化对象(new Base())时相当于调用了一个构造方法
15、new Rect()是匿名对象,匿名对象的缺点是每次使用都要重新实例化
Rect rect = new Rect();
rect.draw();
rect.draw();
new Rect().draw();
new Rect().draw();//每次使用都要重新实例化
二、数组工具类的常用方法
Arrays.sort(arrays);//数组排序,arrays是数组名,即数组的引用
System.out.println(Arrays.toString(arrays));//将数组转换为字符串输出
int[] copy = Arrays.copyOf(array,array.length*2);//拷贝array数组,拷贝的长度为array.length*2,如果拷贝的长度太长则扩容
int[] copy = Arrays.copyOfRange(array,1,3);//拷贝array数组中1到3下标的内容,但因为Java[1,3),所以拷贝到的只是1下标和2下标的内容,如果拷贝的长度太长则扩容
System.out.println(Arrays.binarySearch(array,15));//Arrays工具类实现的二分查找,在数组中找15
Arrays.binarySearch(int[] a, int fromIndex, int toIndex, int key)//在数组指定范围内进行二分查找
boolean flg = Arrays.equals(array1,array2);//比较两个数组对应下标的数据是否一样
int[] arr = new int[]{1, 2, 3};
Arrays.fill(arr, -1);//帮数组填充数据,这里将数组内容全部填充(这里是修改)为-1
fill(int[] a, int fromIndex, int toIndex, int val)//在数组指定范围内进行填充,指定的范围是[)