Java学习路程之多维数组、类和对象

本文详细介绍了Java中多维数组的定义、声明及遍历方法,包括二维数组和三维数组。同时深入探讨了面向对象的基本概念,如类与对象的定义、创建和使用,以及成员变量与局部变量的区别,通过实例讲解了Java面向对象编程的核心思想。

一.多维数组
1.二维数组:
定义:保存多个相同类型的一维数组
结构:数据类型[][] 数组名 = 初值
声明方式:声明方式与一维数组的声明方式类似
方法1:int[][] array = new int[数组长度][一维数组长度];
方法2:int[][] array = new int{{1, 2, 3},{4, 5, 6}};
方法3:int[][] array = {{1, 2, 3},{4, 5, 6}};

public class Day05 {
	public static void main(String[] args) {
		//1.声明一个有两个一位数组,并且每个一位数组有三个元素的二维数组
		int[][] array1 = new int[][] {
			{1, 2, 3},{4, 5, 6}
		};
		//遍历二维数组(一维数组遍历使用for循环,二维数组遍历使用双重循环以此类推)
		for(int i = 0; i< array1.length; i++){
			for(int j = 0; j < array1[i].length; j++){
			System.out.print(array1[i][j]);
			}
			System.out.println();
		}
	}
}

2.三维数组
定义:保存相同类型的二维数组
结构:
数据类型 [][][] 数组名 = 初值;
三维数组的声明方式与二维数组的声明方式类似只是多了一个[].

public class Day05 {
	public static void main(String[] args) {
		//声明一个有两个二维数组,每个二维数组中有三个一维数组,每个一位数组中有三个元素的三维数组
		int[][][] array2= {
				{
					{1, 2, 3},
					{4, 5, 6}
				},
				{
					{7, 8, 9},
					{10, 11, 12}
				}	
		};
		//遍历三维数组并求这个三维数组所有元素的和
		int sum = 0;
		for (int i = 0; i < array3.length; i++) {
			for (int j = 0; j < array3[i].length; j++) {
				for (int k = 0; k < array3[i][j].length; k++) {
					System.out.print(array3[i][j][k] + " ");
					sum = sum + array3[i][j][k];
				}
				System.out.println();
			}
			System.out.println();
		}
		System.out.println("总和:" + sum);
	}
}

二.类和对象
1.面向过程和面向对象
面向过程:
强调过程,每一个步骤,过程的执行者
面向对象:
强调的是对象,有执行者变成了指挥者
面向对象的好处:
1.1懒人思维
1.2将复杂的问题简单化
1.3从事物的执行者转变成事物的指挥者
2.类和对象
类:对抽象事物的描述(模板)
类中包含属性(成员变量)和行为(方法)
对象:对抽象事物的具体描述(利用类创造出来的事物,所以Java中先有类后有对象)
创建对象:类名 对象名 = 初值

public class Day05 {
	public static void main(String[] args) {
		//创建一个学生对象
		//new会在堆内存中开辟一块空间,保存成员变量
		//等号前是对象的引用(保存对象地址)
		Student student1 = new Student();
		//为对象的成员变量赋值
		student1.name = "李四";
		student1.age = 20;
		student1.gender = "男";
		//取值
		System.out.println(student1.name);
		System.out.println(student1.age);
		System.out.println(student1.gender);
		//调用成员方法
		//对象名.方法名(参数)
		//成员方法跟函数一样会进栈执行
		student1.eat();
		student1.sleep();
		student1.playGame("王者荣耀");
		{
			输出结果:
			李四
			25
			男
			吃饭
			睡觉
			玩王者荣耀
		}
		//两个引用指向了同一个内存空间
		Student student2 = student1;
		student2.name = "王龙";
		System.out.println(student1.name);
		{
			输出结果为:王龙
		}
	}
	上面代码在内存中的表现如图:(https://img-blog.csdn.net/20180824204645691?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2w3MTA4MjA3NDI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
	/*
 * 使用关键词class创建一类
 * 注意:一个.Java文件中可以创建多个不同的类,但是使用public修饰的类,一个文件只能有一个,并且这个用public修饰的类必须与文件名保持一致
 * 学生类
 * 属性:姓名 年龄 性别
 * 行为:
 * 吃饭
 * 睡觉
 * 打游戏
 */
 class Student {
     //属性(位置在类中方法外)
	 String name;
	 int age;
	 String gender;
	 //方法
	 public void eat(){
		 System.out.println("吃饭");
	 }
	 public void sleep(){
		  System.out.println("睡觉");
	 }
	 public void playGame(String gameName) {
		System.out.println("玩" + gameName);
	}
 }
}

3.成员变量和局部变量的区别
1)生命周期
成员变量:随着对象的创建而创建,对象的销毁而销毁
局部变量随着方法的执行而创建,方法的结束而销毁
2)书写位置
成员变量:类中方法外
局部变量:方法上或方法中
3)作用域
成员变量:在整个类中都可使用
局部变量:在方法的作用域内有效
4)初值
成员变量:如果没有初值系统会自动分配初值(基本数据类型初值为0,引用数据类型为null)
局部变量:没有初值会报错,不能使用
5)在内存中表现
成员变量:保存在堆区
局部变量:运行在栈区

public class Day05 {
	public static void main(String[] args) {
		Car car1 = new Car();
		car1.sayHi();
		car1.run();
	}
	/*
 * 车类Car
 * 车名 排气量 颜色
 * 开车
 * 停车
 * 介绍自己的方法(输出自己所有的成员变量的方法)
 */
class Car{
	//车名
	String name = "红旗尊享版";
	//排量
	String displacement = "涡轮增压4.0";
	//颜色
	String color = "白色";
	//局部变量的书写位置:声明在方法上或者方法中
	//局部变量的作用域:在方法的作用域内
	//开车
	public void run(){
		//就近原则
		String name = "李四";
		System.out.println(name);
		System.out.println("开车");
		/*
		 * 局部变量不给初值不能直接使用
		 * int num;
		System.out.println(num);*/
	}
	//介绍自己的方法
	public void sayHi() {
		//成员变量的作用域,在整个类里都可访问到
		System.out.println("车名:" + name);
		System.out.println("排量:" + displacement);
		System.out.println("颜色:" + color);
	}
} 
//输出:
{
	车名:红旗尊享版
	排量:涡轮增压4.0
	颜色:白色
	李四
	开车
}

4.匿名对象

作用:
1.省略代码
2.一般可以当做参数来使用
public class Day05 {
	//修改对象的name
	//Person p = p1;
	//引用数据类型,参数传递的是地址
	public static void fn(Person p) {
		p.name = "张三";
		p.sayHi();
	}
	
	public static void main(String[] args) {
		Person p1 = new Person();
		p1.name = "李四";
		p1.age = 16;
		p1.sayHi();
		//调用方法
		fn(p1);//输出:张三
		p1.sayHi();
		
		//创建匿名对象
		//new 开辟了三个内存空间之间没有联系
		new Person().name = "网红";
		new Person().age = 14;
		new Person().sayHi();
		//可以当做参数来用,减少代码
		fn(new Person());
		//测试方法时使用
	}
}

5.成员变量私有化(get和set方法)
1.面向对象的特征:封装,继承,多态
2.将代码的实现或者属性隐藏起来,不让外界直接访问
3.被private修饰的成员变量,只能被本类进行访问
javaBean(实体类)规范:
1.成员变量私有化
2.提供get/set方法

public class Demo06 {
	public static void main(String[] args) {
		Phone p1 = new Phone();
		p1.setName("诺基亚");
		System.out.println(p1.getName());
	}
}

class Phone{
	//成员变量私有化
	private String name;
	private String color;
	//私有化之后需要提供对外的访问方法
	//每个成员变量需要提供一对方法 赋值(set方法)和取值(get方法)
	//方法命名规范set+成员变量名(使用的是小驼峰)
	//set方法
	public void setName(String name) {
		//就近原则
		//使用关键字this
		//this表示本类的对象
		//this.name表示本类的name属性
		//this 谁调用了这个方法 这个对象就是this
		this.name = name;
	}
	//get方法
	public String getName() {
		return name;
	}
	//color
	public void setColor(String color) {
		this.color = color;
	}
	public String getColor() {
		return color;
	}
	public void sayHi() {
		System.out.println(name +" "+ color);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值