每天回顾是很重要的,知识就是一个反复学习的过程,书读百遍其义自见,每次回看和总结,都会学到一些东西;
1、在进行数组元素之间的比较问题中,选取的比较参照物,一定要是数组容器中的一个元素;
2、方法的形参是基本数据类型时,方法中对传递进来的变量进行修改,不会影响调用者里面对应变量的值,只会影响方法中变量的值;同时局部变量只有在方法中有效,局部变量将会随着方法的出栈而立刻消失;
例01
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a:" + a + "b:" + b);// 10,20
change(a, b);
System.out.println("a:" + a + "b:" + b);// 10,20
}
public static void change(int a, int b) {
a = 1;
b = 1;
System.out.println("a:" + a + "b:" + b);// 1 ,1
}
3、方法的形参是引用数据类型时,方法中传递是对应的地址值,对其里面的元素进行修改会影响调用者里面对应的值;
public static void main(String[] args) {
int [] arr = {1,2,3,4,5};
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");//1 2 3 4 5
}
System.out.println();
change(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");//10 10 3 4 5
}
System.out.println();
}
public static void change(int[] arr) {
arr[0] = 10;
arr[1] = 10;
}
【总结】:方法的参数为基本数据类型时,传递的是数据值,方法参数为引用数据类型时,传递的是地址值;
4、当多个引用指向同一对象时,只要其中一个引用对这个对象中的值进行修改,那么所有的引用再次访问这个对象时,就是修改后的值;
例02
public static void main(String[] args) {
Student s = new Student();
System.out.println(s.name + "---" + s.age);//null---0
method(s);
System.out.println(s.name + "---" + s.age);//张三---23
}
public static void method(Student s) {
System.out.println(s.name + "---" + s.age);//null---0
s.name = "张三";
s.age = 23;
System.out.println(s.name + "---" + s.age);//张三---23
}
例03
public static void main(String[] args) {
Student s = new Student();
s.name = "张三";
s.age = 23;
method(s);//return返回的地址值没有进行接收,所以new的对象没有任何指向,变成垃圾
System.out.println(s.name + "---" + s.age);//张三--- 23
}
public static Student method(Student s) {
s =new Student();//S对象指向新的对象地址
s.name = "李四";
s.age = 24;
return s;
}
例04
public static void main(String[] args) {
Student s = new Student();
s.name = "张三";
s.age = 23;
s = method(s);//有返回值,同时将地址值赋值给S,此时S的地址将发生改变
System.out.println(s.name + "---" + s.age);//李四--- 24
}
public static Student method(Student s) {
s =new Student();
s.name = "李四";
s.age = 24;
return s;
}
5、public和private关键字
【a】public是公共的,修饰的成员变量和成员方法,在任何地方都可以使用;
【b】private是私有的,修饰的成员变量和成员方法只能在本类中使用,其他类不可使用,可以通过set方法进行设置数据,提高代码的安全性;
6、boolean作为成员变量时,get和set的定义
public void setMale(boolean b){
male = b;
}
public boolean isMale(){
return male;
}
7、匿名对象:只能使用一次
Student s = new Student();
//等号左边的s记录了这个对象的地址值,就是这个对象的地址值
//new Student();这是就是匿名对象
匿名对象不能单独成行使用,单独成行没有任何意义;因为匿名对象的这一行代码完毕之后,就没有对象指引了,在堆内存就变成垃圾了,等待垃圾回收器的回收;
例05
Student [] stus = new Student[3];
//我们还没有对这个数组进行赋值,那么里面装的是3个null
stus[0].name = "张三";
//那么我们通过stus[0]获得到的不是学生的对象, 是数组的默认
初始化值 null
//拿着null去调用name,编译时会报NullPointerException异常
System.out.println(stus[0].name);//问结果是多少?
【总结】:
【a】引用数据类型的数组,不能直接获取值,必须先赋值才能使用,否则里面装的都是默认值null;
【b】对于基本数据类型的数组,没有进行赋值,那么里面的元素将是对应的默认值;
8、字符串是一个常量,一旦被创建就不可发生改变;
【a】将字节数组转换为String对象
new String(byte[] byte);
【b】将字符数组转换为String对象
new String(char[] char);
【c】获取字符串的长度(个数):“aaa”.length
【d】获取字符串的每个元素:charAt(index)
9、== 可以比较基本数据类型,也可以比较引用数据类型
【a】在比较基本数据类型时,比较的是数据的数值;
【b】在比较引用数据类型时,比较的是数据的地址值;
10、字符串的split使用:
如果按照英文句点“.”进行切分,【必须写"\."(两个反斜杠)】
【.代表的是任意字符】
【+代表的是数量词】
【*代表的是数量词】
如果遇到以上三个字符,使用split切割的时候,要使用\转义 --> 把这些具有特殊含义的字符转义成一个普通的字符;
【学习总结】:ArrayList集合使用remove()方法时,一定要注意,集合随着删除,集合的长度会随之减少;
特别注意在遍历集合的时候,进行删除动作,数组长度会根据删除,元素会向左移动,补全空位,在遍历的操作中,为避免上述情况的发生,通常使用【倒序遍历】array.length-1,但是如果正序遍历,就要进行回退动作,【i–】
今天不再状态,先总结到这,学习之路,加油,共勉,以马内利