二维数组
保存多个相同数据类型的一维数组
//声明一个二维数组
int[][] array = new int[2][3];
//声明了一个 有两个一维数组并且每个一维数组有三个元素的 二维数组
System.out.println(array.length);
//二维数组的长度 打印的是 有几个一维数组
//声明时直接把元素声明出来
//1,2,3 4,5,6
int[][] brr = {
{1, 2, 3},
{4, 5, 6}
};
System.out.println(brr);
//取出的是二维数组中的第1个元素(是个一维数组)
System.out.println(brr[0].length);
System.out.println(brr[0][1]);
//取出二维数组中的第一个元素(一维数组)中的第二个元素 2
for (int i = 0; i < brr.length; i++) {
for (int j = 0; j < brr[0].length; j++) {
// System.out.print(brr[i][j]);
}
// System.out.println();
System.out.println(Arrays.toString(brr[i]));
三维数组
保存多个相同数据类型的二维数组
//声明三维数组
//有两个二维数组
//每个二维数组有三个一维数组
//每个一维数组有4个元素
int [][][] array3 = new int[2][3][4];
//声明有元素的三维数组 223
//描述多维数组的例子: 羊肉串
int [][][] brr3 = {
{
{1, 2, 3},
{4, 5, 6}
},
{
{7, 8, 9},
{10, 11, 12}
}
};
//遍历三维数组(剥皮)
for (int i = 0; i < brr3.length; i++) {
for (int j = 0; j < brr3[i].length; j++) {
for (int k = 0; k < brr3[i][j].length; k++) {
System.out.print(brr3[i][j][k]);
}
System.out.println();
}
}
面向对象和过程
面向过程
强调的是过程 过程执行者
挑选电脑
1.CPU i5 i7 i9
2.显卡 七彩虹 影驰
3.主板 华硕
4.内存 ddr4
5.硬盘 512G
控制预算
面向对象
强调的是对象 对象指挥者
找一个懂电脑的来挑选
优势:
1.懒人思维(更贴近人的思维)
2.将复杂的问题 简单化
3.从事物的执行者 转变成 事物的指挥者
类和对象
java中最基本的单位 就是类
类: 对抽象事物的描述(模板)
对象: 对抽象事物的 具体描述(利用类创造出来具体事物)
如何描述一个程序员?
属性(成员变量 实例实量) 名词描述
行为(方法) 动词描述
创建一个学生类
使用关键词 class
属性:姓名 性别 年龄
行为:吃饭 睡觉 打游戏
注意:一个.java文件中可以创建多个不同的类
但是使用public修饰的类 一个文件只能有一个
并且 这个用public 修饰的类 必须跟.java文件的文件名 保持一致
class Student{
//属性(成员变量) 类中方法外
String name;
String gender;
int age;
//行为(成员方法) 先不写static其他跟函数声明一样
public void eat() {
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
public void playGame(String gameName) {
System.out.println("玩" + gameName);
}
}
项目中 可以不可以有同名的类 可以
注意: 开发中尽量不要使用同名的类(避免麻烦)
思考:一段代码 在内存中如何表现
成员变量有没有默认的初始值?
public static void main(String[] args) {
//创建一个学生对象
//类名 对象名 = 初值;
//等号前面 叫做对象的引用(保存对象的地址)
Student stu1 = new Student();
//new 会在对内存中开辟一块空间
//保存的事成员变量
//成员方法跟函数一样 会进栈执行
//为对象的成员变量赋值
// 对象名.属性名 = 值;
stu1.name = "Gorilla";
stu1.age = 23;
stu1.gender = "Male to female";
//取值
System.out.println(stu1.name);
System.out.println(stu1.age);
System.out.println(stu1.gender);
//调用成员方法
//对象名.方法名(参数);
stu1.eat();
stu1.sleep();
stu1.playGame("jier");
Student stu2 = stu1;//两个引用指向了同一个对象(内存空间)
stu2.name = "gorilla";
System.out.println(stu1.name);
}
成员变量 和 局部变量 的区别
1. 生命周期(出生到死亡)
成员变量: 随着对象的创建而创建,随着对象的销毁而销毁
局部变量: 随着方法的执行而创建,随着方法的结束而销毁
2. 初值
成员变量: 如果没有初值 系统会给默认值
局部变量: 没有初值 不能使用
3. 作用域
成员变量: 在整个类中有效
局部变量: 在方法中有效
4. 创建位置
成员变量: 类中方法外
局部变量: 方法上或者方法中
5. 在内存中的表现
成员变量: 保存在堆内存中的
局部变量: 运行在栈内存当中
创建匿名对象
//new 开辟了3个内存空间 之间没有联系
new Person().name = "little gorilla酱";
new Person().age = 20;
new Person().introducte();
//当做参数使用 减少代码
//测试方法时使用
面向对象的特征: 封装 继承 多态
封装
方法本身就是一种封装
将代码的实现或者属性隐藏起来 不让外界直接访问
对外提供访问方法(间接访问)
关键词 private(私有)
被private修饰的成员变量 只能被本类访问
class Phone{
//成员变量私有化
private String name;
private String color;
//私有化之后 需要提供对外的访问方法
//每一个成员变量 需要提供一对方法 赋值(set方法) 和 取值(get方法)
//命名规范 set+成员变量名() 小驼峰
public void setName(String name) {
//就近原则
//name = name;
//使用关键字 this
//this 表示本类的对象
//this.name 表示 本类的name属性
//this 谁调用了这个方法 这个对象就是this
this.name = name;
}
//get方法
public String getName() {
return name;
}
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public void intruducte() {
System.out.println(name + " " + color);
}