目录
二维数组
数组里存储的元素是数组
一、二维数组的声明
-
数据类型[][] 数组名=new 数据类型[一维数组的个数(行)][一维数组长度(列)];
-
数据类型[][] 数组名=new 数据类型[一维数组的个数(行)][];
-
数据类型[][] 数组名=new 数据类型[][]{{元素1,元素2},{元素3},{元素4,元素5}};
-
数据类型[][] 数组名 = {{元素1,元素2},{元素3},{元素4,元素5}};
//格式一
int[][] arr1 = new int[3][2];
arr1[0][0] = 12;
System.out.println(arr1[0]);//打印的是地址:[I@1b6d3586
System.out.println(arr1[0][0]);//12
//格式2
double[][] arr2 = new double[3][];
System.out.println(arr2[0]);//null
arr2[0] = new double[2];
arr2[1] = new double[3];
arr2[2] = new double[4];
System.out.println(arr2[0]);//打印的是地址:[D@4554617c
//格式3
String[][] arr3 = new String[][]{{"hello","world"},{"!!"},{"Java"}};
//格式4
String[][] arr4 = {{"hello","world"},{"!!"},{"Java"}};
二、二维数组的遍历
//二维数组的遍历
for (int i = 0; i < arr3.length; i++) {
//得到二维数组每个一维数组
String[] s = arr3[i];
System.out.println(Arrays.toString(arr3[i]));
//遍历每个一维数组
for (int j = 0; j < s.length; j++) {
System.out.println(s[j]);
}
}
System.out.println("===========");
for (String[] s : arr4){
for (String str : s ){
System.out.println(str);
}
}
面向对象
一、对象概述
-
对象
万物皆对象,客观存在的事物都是对象。大到地球,小到每个动物、交通工具、电子产品等。
简单理解:对象是具体存在的看得见摸得着事物。
-
类
类是对现实生活中的一类具有共同属性和行为的事物的抽象,是具有相同属性和行为的一组对象的集合。
简单理解:类就是对现实事物的一种描述,类中声明有对象的属性和对象的行为。 (描述对象是什么样的)
-
对象的属性
属性:对象具有的各种特征,每个对象的每个属性都拥有特定的值。
比如:名称,价格,内存就是手机的属性。 人:名字,年龄,性别
手机的名称:iphone18
手机的价格:9.9
手机的内存:1024GB
-
对象行为
行为:对象能够干什么。
比如手机可以打电话,照相。 人:吃饭,睡觉,学习
类(class) 属性 行为 对象(具体的事物) 人 名字、年龄、性别 吃饭、睡觉、打豆豆 一无所有的我、不知妻美的刘强东 手机 品牌、型号、内存 打电话、玩游戏、学习 华为P50、OPPO Find X、小米12 动物 品种、性别、毛色 捕食、睡觉、繁殖 二哈、金毛 总结:
可以把类看做成一张图纸,对象就是通过图纸造出来的具体事物,对象是什么样能做什么,取决于类是如何去设计定义的。
二、类的定义
类是由属性和行为组成。
属性:在类中通过成员变量来体现。(声明在类中方法外的变量)
行为:在类中通过成员方法来体现。(不用static修饰的方法)
例如:创建一个手机类
手机的属性:品牌,价格
手机的行为:打电话,刷视频
例如:
public class 手机{
成员属性;
成员行为;
}
public class Phone {
//描述手机的属性(成员变量),声明在类中方法外,在创建对象时才被加载
String name;//手机名称
double price;//手机价格
int storage;//内存
//描述手机的行为(成员方法),不用static修饰的方法。名称:满足驼峰法,动宾结构
//打游戏
public void playGame(){
System.out.println("打游戏");
}
//打电话
public void call(){
System.out.println("打电话");
}
}
三、对象的使用
1.创建对象(实例化)
格式:类名 对象名=new 类名();
范例:Phone p=new Phone(): //相当于造出了一个具体的手机
Phone p = new Phone();//实例化
2.使用对象
对象名.属性名=值;
对象名.成员方法名();
//设置属性值,引用.成员变量名=值
p.name = "苹果";//赋值
p.price = 99.9;
p.storage = 128;
//成员变量的访问,格式:引用.成员变量名
System.out.println(p.name);
System.out.println(p.price);
System.out.println(p.storage);
//成员方法的访问,格式:引用.成员方法名
p.playGame();
p.call();
四、成员变量和局部变量的区别
- 成员变量:定义在类中,方法外的变量
- 局部变量:在类的方法中定义的变量
区别 | 成员变量 | 局部变量 |
代码中位置 | 类中方法外 | 类中方法内 |
内存中位置 | 堆内存 | 栈内存 |
生命周期不同 | 随对象存在而存在,随对象消失而消失 | 随方法调用而存在,方法执行完消失 |
初始化值不同 | 有默认的初始化值 | 没有默认值,使用前必须初始化 |
五、this关键字
- 1. 表示当前对象的引用
- 2. 当局部变量名和成员变量名一样时,使用this可以区别局部变量和成员变量
- 3. 方法被哪个对象调用,this就指代的是哪个对象。
- 4. 在成员方法中,可以使用this.方法名调用其它的成员方法
public class People {
public String name;
public Integer age;
public void eat(){
String name = "李四";
this.play();//18岁的菜菜在玩耍
System.out.println(age+"岁的"+name+"在吃饭");//18岁的李四在吃饭
}
public void play(){
String name = "李四";
System.out.println(age+"岁的"+this.name+"在玩耍");//18岁的菜菜在玩耍
}
public class TestPeople {
public static void main(String[] args) {
//创建了一个People对象,并初始化属性值
People p = new People();
p.name = "菜菜";
p.age = 18;
p.eat();
p.play();
}
}
六、构造方法
- 1.在创建对象时会自动调用构造方法
- 2.如果没有定义构造方法,系统将给出一个默认的无参构造方法(看不见的)。
- 3.如果定义了构造方法,系统将不再提供默认的构造方法,默认的无参构造方法将会被覆盖
- 4.可以使用方法的重载去声明有参或者无参的多个构造方法。
- 5.在构造函数中可以使用this(参数列表)调用另一个构造函数。
- 注:this() 必须放在第一行
public class Animal {
String name;//名字
String gender;//性别
int age;//年龄
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
public Animal(){
this("张三");//调用了有参构造方法。该句必须在第一行
System.out.println("调用了无参构造方法");
//this("张三");//报错
}
public Animal(String name){
System.out.println("调用了有参:" + name);//调用了有参:张三
}
public Animal(String name, int age,String gender){
this.name = name;
this.age = age;
this.gender = gender;
}
}
public class TestAnimal {
public static void main(String[] args) {
//创建Animal对象,默认调用了无参构造方法
Animal a = new Animal();//调用无参构造器
Animal a2 = new Animal("猫猫",5,"公");//调用有三个参数的构造器
System.out.println(a2.name+a2.gender+a2.age);//猫猫公5
}
}
扩展知识
- next 与 nextLine
- next 不接收空格,遇见空格时结束读取
- nextLine 接收空格
- 调用next方法时,通过控制台输入字符串,使用enter键('\n')结束
- 在next方法下,使用nextLine方法时,该方法会识别enter('\n'),所以会自动结束,不会生效
Scanner scan = new Scanner(System.in);
String str1 = scan.next();
String str2 = scan.nextLine();
System.out.println(str1);
System.out.println(str2);
Scanner scan = new Scanner(System.in);
String str1 = scan.next();
String str2 = scan.next();
System.out.println(str1);
System.out.println(str2);