数组的复制(浅拷贝与深拷贝)
package com.atfqs.java;
public class ArrayTest2 {
public static void main(String[] args) {
int[] arr1 = new int[]{1,2,3};
// int[] arr2;
// arr2 = arr1;//浅拷贝 只复制了地址值,修改了都改了,有几个new就用到了堆里面的空间数组的个数
// arr2[0] = 123;
// for(int a:arr1){
// System.out.print(a+" ");
// }
//数组的复制 深拷贝 谁都不影响谁
int[] arr3 = new int[arr1.length];
for(int i = 0;i < arr1.length;i++){
arr3[i] = arr1[i];
}
arr3[0] = 123;
System.out.print("arr1:");
for(int a:arr1){
System.out.print(a+" ");
}
System.out.print("arr3:");
for(int a:arr3){
System.out.print(a+" ");
}
}
}
arrays工具类(减少自己的代码量)的使用常用的举例,具体看API开发文档
数组的异常:ArrayIndexOutOfBoundsException 下标越界
NullPointerException 空指针异常
面向对象(重点)
初识面向对象
/*
* 一java面向对象学习的三条主线
* java类以及类的成员:属性 方法 构造器 代码块 内部类
* 面向对象的三大特征:封装 继承 多态
* 其他关键字 this super static final abstract interface package import等
* 题目:人把大象装进冰箱
* 面向过程:1打开冰箱 2 抬起大象塞进冰箱 3 关上冰箱
* 面向对象: 强调具备功能的对象,以类/对象为最小的单位,考虑谁来做 关注主体
* 人{
* 打开(冰箱){
* 冰箱.开开();
* }
*
* 抬起(大象){
* 大象.进入(冰箱);
* }
* 关闭(冰箱){
* 冰箱.闭合();
* }
* }
* 冰箱{
* 开开();
* 闭合();
* }
* 大象{
* 进入(冰箱){
* }
* }
*/
类: 对一类事物的描述,是抽象的,概念上的定义
对象:实际存在的该类事物的每一个个体,因而也被称为实例
面向对象设计就是设计类 设计类就是设计类中的成员
类与对象的使用
1创建类 设计类的成员
2 创建类的对象
3 通过 “对象.属性“ ”对象.方法”调用对象的结构
package com.atfqs.java;
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person();//造对象
p1.name = "Tom";//调用类属性 对象.属性
p1.talk("中文");//调用类方法 对象.方法
//**************************
Person p2 = new Person();//对象的默认属性null
System.out.println(p2.name);//如果创建了一个类的多个对象,则每个对象都拥有一套类的属性(非static的)
Person p3 = p1;//浅拷贝
p3.name = "Jack";
System.out.println(p1.name);
}
}
class Person{//造类
//属性 = 成员变量 = field = 域 字段
String name;
int age;
boolean isMale;
//方法 = 成员方法 = 函数 = method
public void eat(){
System.out.println("人可以吃饭");
}
public void sleep(){
System.out.println("人可以睡觉");
}
public void talk(String language){
System.out.println("人可以说话,使用的语言:"+language);
}
}
类与对象的内存解析
类中属性成员变量的使用: vs 局部变量
类中的方法的声明与使用以及return的使用
类中的方法可以调用属性与方法
特殊:递归方法:自己调用自己{递归出口 递归函数} 方法内不可再声明另一个方法