构造方法概述和格式
* 构造方法概述和作用
* 给对象的数据(属性) 进行初始化
* 构造方法的格式特点
* a格式:修饰符 类名(参数类型 参数名){代码块 }
* 方法名和类名相同
* 没有返回值类型 连void也没有
* 没有具体的返回值 return
* 构造方法的重载及注意事项
* 构造方法重载
* 重载:方法名相同 返回值类型无关 只看参数列表
* 构造方法注意事项
* a:如果我们没有给构造方法 系统默认会给一个空参构造方法
* b:如果有构造方法 系统不再给一个空参构造方法
给成员变量赋值的两种方式的区别
* A:setXXX()方法 修改属性值
* B:构造方法 给属性进行初始化
* 区别:这两种方式 在开发中用setXXX更多一些 因为比较灵活
学生类的代码及测试
* 案例演示
* 成员变量
* name age
* 构造方法
* 无参 带两个参数
* 成员方法
* getXXX() setXXX()
* show();
* 区别:show()只是显示 getXXX()获取属性值 可以打印 也可以赋值给其他的变量
* 给成员变量赋值
* setXXX() 修改属性值
* 构造方法 给属性初始化
* 区别:
* 输出成员变量值的方法
* getXXX
* 自定义一个成员方法show
手机类的代码及测试
* 案例演示
* 成员变量
* brand price
* 构造方法
* 无参构造
* 有参构造
* 成员方法
* getXXX() setXXX()
* show()
创建一个对象的步骤 Student stu = new Student();
* 1 Student.class加载进方法区
* 2 在栈的main方法中声明Student的引用类型
* 3 在堆中为new Student() 创造空间
* 4 成员变量默认初始化值(是null和0)
* 5 成员变量显示初始化值( 成员变量声明的同时赋值)
* 6 在栈中 构造方法进栈 为Student的成员变量赋值 然后弹栈
* 7 将堆中new出来的对象地址值传给Student的引用类型
长方形案例
* 案例演示
* 需求:
* 定义一个长方形类 定义 求周长和面积的方法
* 然后定义一个测试类进行测试
* 成员变量
* length width
* 构造方法
* 无参构造
* 有参构造
* 成员方法
* getXXX() setXXX();
* getPerimeter() getArea()
* **自己出错:在getPerimeter()和getArea()中设置参数**
员工类案例练习
* 需求:定义一个员工类Employee
* 成员变量
* id name salary
* 构造方法
* 无参 有参
* 成员方法
* getxxx() setxxx()
* work()显示员工信息;
static 关键字的特点
* A:static关键字的特点、
* a,随着类的加载面加截
* b,优先于对象存在
* c,被类的所有对象共享
* 咱们班级的学生应该共用同一个班级编号
* 什么时候使用静态?
* 如果某个成员变量是被所有对象共享的 那么它就应该定义为静态
* 举例
* 饮水机(静态修饰 都用同一个饮水机)
* 水杯(非静态 每个人的水杯不一样)
* 可以通过类名调用
* 静态变量(类变量) 静态方法 (类方法)
static的注意事项
* static的注意事项
* 静态方法中是没有this关键字的
* 静态是随着类的加载而加载 this是随着对象的创建而存在
* 静态比对象先存在 所以在静态方法中调用的this是不存在的
* 静态方法只能访问静态的成员变量和静态的成员方法
* 静态方法
* 成员变量:只能访问静态变量
* 成员方法: 只能访问静态方法
* 原因:静态成员随着类的加载而创建 非静态成员随着对象创建而存在 调用静态成员时非静态成员可能没有创建
* 非静态方法
* 成员变量:可以是静态 也可以是非静态
* 成员方法:可以是静态成员方法 也可以是非静态方法
* 简单记
* 静态只能访问静态
静态变量和成员变量的区别
* 静态变量也叫类变量 成员变量也叫对象变量
* A,所属不同
* 静态变量属于类 也叫类变量
* 成员变量属于对象 也叫对象变量
* B,内存中的位置不同
* 静态变量:方法区的静态区
* 成员变量:堆内存中
* C,内存中出现的时间不同
* 静态变量:随着类的加载而加载
* 成员变量:随着对象的创建而加载
* D,调用不同
* 静态变量:通过类名调用 也可以通过对象调用
* 成员变量:通过对象调用
main方法的格式详细解释
* A:格式
* public static void main(String[] args){}
* B:针对格式的解释
* public 被JVM调用 访问权限足够大
* static 被JVM调用 不用创建对象 直接类名访问
* void 被JVM调用 不需要给JVM返回值
* main 一个通用的名称 虽然不是关键字 但是被jvm识别
* String[] args 以前用于接收键盘的录入
* 演示案例
工具类中使用静态
A制作一个工具类
- ArrayTool
- 获取最大值
- 数组的遍历
数组的反转
/* 数组的反转 返回值类型 void 参数列表:int[] nums 分析:交换数组元素值 交换次数:数组长度除2 创建一个临时变量存放交换值 */ public static void revArray(int[] nums){ for (int i = 0; i<nums.length/2 ;i++ ) { //循环次数为元素个数的一半 int temp = nums[i]; nums[i] = nums[nums.length-1-i]; nums[nums.length-1-i]= temp; } }
工具类里最好都是静态方法 可以省略创建对象调用节约内存空间我们可以私有化构造方法(不能创建对象,只能通过类名调用静态方法)
说明书的制作过程
- A,对工具类加入文档注释
/* / - B,通过javadoc命令生成说明书
- @author
- @version
- javadoc -d
- @param
学习Math类的随机数功能
生成1-100的数
* 分析: * Math.random()可以生成0-1的随机小数 * Math.random()*100生成0-100的随机小数 * (int)Math.random()*100 生成0-99的整数 * (int(Math.random()*100)+1 生成1-100的整数
Math类的小游戏
A:案例演示
需求:猜数字小游戏(数据在1-100之间)
* 分析: * 1,利用Math.random()获取一个1-100之间的数字 * 2,使用Scanner获取一个猜的数字 * 3,设置一个for循环 * 4,如果大于随机数 输出大了 * 5,如果小于随机数 输出小了 * 6,刚好等于 就输出中了