输出数组地址
int[] arr = new int[4];
int[] arr2 = new int[3];
System.out.println(arr); //输出的为数组的地址值 : [I@5fd0d5ae
System.out.println(arr2);// [I@2d98a335


i
数组的地址赋值
int[] arr = {1,2,3};
int[] arr2 = arr; //将arr的地址赋值给arr2
//修改arr2的第二个元素为8
arr2[1] = 8;
System.out.println(arr[1]); // 8
数组越界
//数组越界 两种可能;1.数组下标越界 2.数组中没有空间
System.out.println(arr[3]); //ArrayIndexOutOfBoundsException
//数组的空指针异常
//意味着arr将不会保存数组的地址,也就是不允许再操作数组了
arr = null;
System.out.println(arr[0]);//NuLLpointerException
案例
创建一个数组,并对这个数组进行反转
public class ArrayDemo04 {
public static void main(String[] args) {
//方法一:
int flag = 0;
int[] arr = {1,2,3,4,5};
for (int i = 0; i < arr.length / 2 ; i++) {
flag = arr[i];
arr[i] = arr[(arr.length - 1) - i];
arr[arr.length -1- i] = flag;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
//方法二:
int[] arr = {1,2,3,4,5};
int[] arr2 = new int[5];
for (int i = 0; i < arr.length; i++) {
arr2[i] = arr[arr2.length - 1 -i];
System.out.print(arr2[i] + " ");
}
/**
* for(初始化条件1,初始化条件2;循环条件;步进运算1,步进运算1)
* 定义 min = 0 最小索引值 , max = arr.length - 1 最大索引值
*/
//方法三:
int[] arr = {1,2,3,4,5};
for (int min = 0, max = arr.length -1;min <= max ;min++,max--){
int temp = arr[min];
arr[min] = arr[max];
arr[max] = temp;
}
//重新遍历反转的数组
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
}
}
数组作为方法的参数进行传递
public class ArrayDemo05 {
public static void main(String[] args) {
sayHello("lbf" );
int[] arr = {1,3,5,7,9};
printArray(arr);//调用方法,实际上是传递数组地址,而不是真实的值
}
public static void sayHello(String name){
System.out.println("hello" + name);
}
//之前我们看到的方法都是基本数据类型作为参数的
//使用数组作为方法的参数
// public static void printArray(形参 实参){
//
// }
// public static void printArray(数据类型 变量值){
//
// }
public static void printArray(int[] arr) {
//想要打印出数组,我们可以使用for循环遍历
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}

数组作为方法的返回值
注:
- 一般方法没有返回值时用void
- 方法有返回值不用void,要用return;
public class ArrayDemo06 {
public static void main(String[] args) {
int[] arr = getArray();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
public static int[] getArray(){
int[] arr = {1,2,3,4,5};
//返回数组的地址,返回给调用者
return arr;
}
}
面向对象编程
对象:泛指现实中一切的事物,每个事物都有自己的【属性】和【行为】
- 面向对象强调:通过调用对象的行为去实现功能,而不是自己去一步一步实现
- 举例:
- 洗衣服:
- 面向过程:把衣服脱掉 --》找盆--》洗衣粉--》加水--》泡一下--》搓搓搓--》拧干--》晾起来
- 面向对象:把衣服托电--》打开全自动洗衣机--》扔衣服--》开关--》晾起来
- 面向过程:强调步骤
- 面向对象:强调对象
- 面向对象特点:将复杂的事情简单化,我们从执行者变成了指挥者
- 面向对象包含三大基本特征:封装、继承、多态
封装实际上是将属性封装起来,属性变为私有的,要提供公有的方法对其进行访问
private 代表最小权限
可以修饰成员变量和成员方法
被private修饰的成员变量和成员方法,只有在本类才能访
private String name;
private int age;
类和对象
类:可以看成一类事物的模板,在面向对象编程中,使用属性和行为来描述类
- 在现实中:
- 属性:该事物的状态信息
- 行为:该事物能干什么
对象:是一类事物的具体体现
- 对象是类的一个实例,对象就必然具备该类事物的属性和行为
- 举例:猫类
- 属性: name:tom; weigh:5kg; age:2 ;skin:black 行为:溜墙根走,蹦跶,喵喵叫 lbf的一只猫(是一个实例也是一个对象)
类与对象的关系:
- 类是对一类事物的描述,抽象的
- 对象是一类事物的实例,具体的
- 类是对象的模板,对象是类的实体
- Car()类 lbf买了一辆奥迪—————》对象
类在Java中的定义
- 现实中的一类事物
- 属性:事物的状态信息 行为:事物能干什么
- Java中和现实是一致的
- 成员变量:对应事物的属性 ,成员的方法:对应事物的行为
- 成员变量:和之前定义变量一样,只不过位置变了,在类中,在方法外
- 成员方法:只不过我们要将以前的方法static去掉(static: 静态方法,静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量)
类的使用
Java中通过创建对象去使用类
格式:
类名 对象名 = new 类名()
返回值类型 具体的对象名字 = new 类();
我们通过对象去访问类中的成员
格式:
对象名.成员变量
对象名.成员方法()
案例:
public static void main(String[] args) {
//调用 学生类
//1.创建类 类名 对象名 = new 类名()
Student s = new Student();
//2.打印这个对象
System.out.println(s);//com.company.Student@2d98a335 包名+十六进制地址
//3.访问其中的成员变量
System.out.println("姓名"+s.name);//null
System.out.println("年龄"+s.age);//0
System.out.println("--------------------");
//4.给成员变量赋值
s.name = "熏悟空";
s.age = 500;
//再次输出变量
System.out.println("姓名"+s.name);//熏悟空
System.out.println("年龄"+s.age);//500
System.out.println("--------------------");
//6.调用成员方法
s.study();
s.eat();
}
}

成员变量的默认值

为成员方法提供公有的get方法(访问获取属性)、set方法(修改属性)
例子:
public class StudentInfo {
private String name;
private int age;
//为成员方法提供公有的get方法(访问获取属性)、set方法(修改属性)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setName(int age) {
this.age = age;
}
//this的含义
//this 代表所在类的当前对象的引用(地址值),即对象自己的引用
// 方法被哪个对象调用,方法中的this就代表哪个对象。
// 即谁在调用,this就代表谁

案例:

