import java.util.Arrays;
//测试类
/*
数据类型分成基本类型和引用类型
我们自己定义的类都属于引用类型,使用有固定的三个步骤
1.导包(找到我们要使用的类)
(1)格式: import 包名.类名;
(2)当前类和所使用的类在同一个包中,不需要导包
(3)java.lang中类,不需要导包
(4)快捷键: alt + 回车
2.创建对象
类名 对象名 = new 类名(实际参数...);
(1)类名: class关键字后面指定的名字
(2)对象名: 就是一个标识符,给对象起个名字方便使用
(3)=: 代表赋值,把右侧new出来的对象,保存(地址值)到左侧的变量中
(4)new: JVM创建对象开辟内存空间的过程
(5)(实际参数...): 根据类中定义的格式确定的,目前()中不用写东西
(6)=左右两边的类名要一致
3.对象的使用:
(1)对象名: 保存对象在堆内存空间的地址值,是一个十六进制的int数字
(2)成员变量的使用:
对象名.成员变量名
比如:
stu.name: 表示对象stu的name属性值
stu.gender: 表示对象stu的gender属性值
stu.age: 表示对象stu的gender属性值
(3)成员方法的使用:
对象名.成员方法名称(实际参数...);
比如:
stu.eat(): 表示调用对象stu的eat方法
stu.study(): 表示调用对象stu的study方法
stu.sleep(): 表示调用对象stu的sleep方法
stu.showInfo(): 表示调用对象stu的showInfo方法
点(.)的理解: 什么什么 的 什么什么
4.对象的成员变量有默认值:
整数: 0
小数: 0.0
字符: 空白字符
布尔: false
引用类型: null
/*
类的定义格式:
修饰符 class 类名 {
//成员变量
//成员方法
}
注意:
1.修饰符目前固定写法就是public
2.class是定义类的关键字
3.类名: class关键字后面的名称叫做类名,
就是一个标识符,注意如果修饰符是public,
那么java文件的名称必须和类名保持一模一样
成员变量:
1.和以前定义变量的格式相同: 数据类型 变量名称
2.成员变量定义在类中方法外
3.以前定义的变量要么在方法内部,要么在方法声明的()中,称为局部变量
成员方法:
1.和以前定义方法的格式相同
2.唯一区别就是必须要去掉static关键字
public 返回值类型 方法名称(形式参数列表...){
功能代码;
}
3.其中参数列表和返回值类型都是根据需求确定的
*/
/*
这里定义了一个类,相当于模板/模型/图纸,不能直接使用,
必须根据类(模板/模型/图纸),创建出一个具体的对象使用
*/
public class Demo01PrintArray {
public static void main(String[] args) {
int[] array = {50, 60, 70, 80, 90, 100};
//调用自己定义的printArray方法,完成打印数组
printArray(array);
/*
面向对象:
当要实现一个功能时,不关心具体的实现步骤,只关心结果,找一个具有该功能的类,帮我们做事
java.util.Arrays类: 操作数组的类
该类中有个方法toString,该方法接收一个int数组,返回一个字符串
*/
System.out.println(Arrays.toString(array));
}
/*
面向过程:当要实现一个功能时,需要亲力亲为,处理每个细节
*/
public static void printArray(int[] array) {
System.out.print("[");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]);
if (i != array.length - 1) {
System.out.print(", ");
}
}
System.out.println("]");
}
}
//获取原有的age属性值
int age = stu2.getAge();
//调用set方法把age的值增加2
stu2.setAge(age + 2);
/* 问题: 定义类,规定了成员变量的含义,但是却无法保证成员变量的取值在一个合理有效的范围 比如: 年龄age取值应该 age>=0 && age<=100 解决方案: 单词private是私有的私有的意思 单词public是公共的意思 1.将需要保护的成员变量使用private关键字,修饰一把 2.private可以修饰的内容: (1)修饰成员变量: private 数据类型 变量名称; (2)修饰成员方法: private 返回值类型 方法名称(参数列表...){...} 3.private关键字的特点: (1)被private修饰的成员变量,只能在本类中直接使用, 在其它类中不可以通过对象名.成员变量名的形式继续访问了 (2)被private修饰的成员方法,只能在本类中直接使用 在其它类中不可以调用了 4.使用private后暴露了新的问题? 成员变量作用就是用来存/取值的,被private修饰后,在其它类中, 就不能完成成员变量值的存储和获取了 解决方案: (1)为private修饰的成员变量提供getter方法 getter方法作用: 用来获取成员变量的值的 三要素: a.方法名称: get+成员变量名(第一个字母大写) b.是否有未知数据参加运算: 没有 没有参数列表 c.是否有结果数据产生: 有,成员变量的类型 (2)为private修饰的成员变量提供setter方法 setter方法作用: 用来给成员变量的设置值 三要素: a.方法名称: set+成员变量名(第一个字母大写) b.是否有未知数据参加运算: 有 定义一个和成员变量类型相同的变量 c.是否有结果数据产生: 没有,void 可以在setter方法内部添加逻辑判断 */
//setAge方法: 修改成员变量age的值 public void setAge(int a) { //方法内部添加逻辑判断,限制年龄的取值范围 if (a >= 0 && a <= 100) { age = a; } }
/* 方法内部直接写变量名的访问规则 就近原则: 方法内部有,直接使用,方法内部没有,找成员变量 局部变量和成员变量同名时,访问规则? 1.直接写变量名: 代表的是局部变量 2.this.变量名: 代表的是成员变量 this关键字作用: 是用来解决局部变量和成员变量同名的情况 this代表谁呢? 哪个对象调用方法,方法内部的this就代表调用方法的那个对象 简单来讲: 谁来调用我,我就代表谁 注意: 每个方法内部都有一个this关键字,用来接收调用方法的对象的地址值, 如果需要使用this,那么就直接使用,不需要用this,那就算了 */
产生新问题: 方法内部的局部变量和成员变量重名了 方法内部直接写变量名,代表的是局部变量,就无法访问了成员变量了
/* 创建对象的过程: 使用new关键字创建对象 + 调用构造方法 构造方法: 1.作用: 当我们使用new关键字创建对象后(成员变量都是默认值), 必须调用构造方法,完成对象成员的初始化工作 2.格式: 修饰符 构造方法名称(参数列表...){ 方法体; return ;//建议省略 } 3.格式解释: (1)修饰符中没有static关键字,目前就认为是固定public (2)没有返回值类型,连void都没有 (3)构造方法名称必须和类名保持一模一样 (4)参数列表根据需求确定 (5)方法体: 一般是用来完成成员变量的赋值的 (6)可以写return ;,建议省略 4.注意: (1)自定义类时,如果一个构造方法都不写,JVM默认隐藏提供一个空参构造 (2)构造方法也是方法,可以重载 (3)自定义类时,只要自己定义一个构造方法,JVM就不再提供空参构造 5.注意: set方法主要是完成对象的成员变量值的修改 构造方法主要是对象创建后,立刻马上给对象的成员变量初始化的 */