1.构造方法的注意事项
构造方法注意:
* 当你这个类 没有提供无参的构造方法的时候
* 系统在你创建对象的时候 也会调用无参构造方法
* 这个无参构造方法系统会帮你提供一个
*
* 如果你只提供了 有参的构造方法 那么系统将
* 不再给你提供 无参的构造方法
*
* 建议:写类的时候 无参 有参的构造方法 都写上 保证不会出错
2.利用构造方法给成员变量赋值
需求: 创建一个长方形的类 计算周长和面积
* 设计:
* 成员变量 长 宽 周长 面积
*
* 要求:
* 1.构造方法
* 2.set/get方法
* 3.成员变量私有化
* 4.计算周长和面积是成员方法
class MyRectangle {
private double height; //长
private double width; //宽
private double permiter;//周长
private double area;//面积
// 构造方法
public MyRectangle() {
}
public MyRectangle(double height, double width) {
this.height = height;
this.width = width;
// 通过计算变量给成员变量赋值
this.permiter = (height + width) * 2;
this.area = height * width;
}
public void setHeight(double height) {
this.height = height;
}
public double getHeight() {
return height;
}
public void setWidth(double width) {
this.width = width;
}
public double getWidth() {
return width;
}
3.静态变量
静态变量(相当于一个共享的变量 每个对象都能访问到)
* 使用关键词 static 修饰
静态变量(类变量)的调用
* 1.可以使用对象 直接调用(不建议)
* 2.使用类名直接调用(建议)
* 为什么建议是使用静态变量直接调用?
* 1.可以和 成员变量区分
* 2.直接使用类名调用更准确 有静态变量时 对象还没创建
静态变量好处:
* 节约内存(静态变量是一个共享的变量)
* 举例:
* 老师被所有学生共享
* 水杯 饮水机
静态变量和成员变量的区别?
* 1.所属不同
* 静态变量:属于类的 也叫类变量
* 成员变量:属于对象的 也叫对象变量(实例)
* 2.在内存中所处位置不同
* 静态变量:在方法区的静态区
* 成员变量:在堆区中
* 3.在内存中的加载时机不同(生命周期)
* 静态变量:随着类的加载而加载 随着类的销毁而销毁(程序结束)
* 成员变量:随着对象的创建而创建 随着对象的销毁而销毁
* 4.调用方式不同
* 静态变量:对象名 和 类名(推荐)
* 成员变量:只能 对象名
4.静态方法在内存中的表示
public static void main(String[] args) {
AVGirl girl = new AVGirl();
girl.name = "苍老师";
AVGirl.country = "日本";
AVGirl girl2 = new AVGirl();
girl2.name = "小泽老师";
girl.sayHi();
girl2.sayHi();
}
}
class AVGirl {
String name; // 姓名
static String country; // 国籍
//思考:构造方法能用private 修饰? 可以的(特殊用途)
public AVGirl(){
}
public void sayHi(){
System.out.println(name + ".." + country);
}
}
对象加载内存中的表现步骤
* 1.加载有main类 的class文件 到方法区中
* 2.main 方法入栈(创建AVGirl对象)
* 3.先把AVGirl.class加载到 方法区中
* 4.在堆内存中 开辟空间 创建AVGirl的对象
* 5.赋值方法 入栈 出栈
* 6.main方法执行完毕 出栈
* 7.程序结束
6.静态方法的调用
静态方法:也是随着类的加载而加载(跟静态变量一样)
* 静态方法的执行 跟 成员方法一样 入栈和出栈
* 静态方法中 不能使用成员变量
* (静态方法加载是 还没有对象)
*
* 简单记:静态的只能调用静态的
* 成员的既能调用成员 也能调用静态的
7.利用静态方法编写一个文档
package com.lanou3g;
/*
* 编译文档命令
* javadoc -d (文件夹名) -version -author 文件名.java
*/
import org.omg.CORBA.PUBLIC_MEMBER;
/**
* 数组的工具类
* 获取数组最大值
* 打印数组
* 数组反转
* 选择排序
*
* @author lanou
* @version 1.0.0
*
*/
public class ArrayTool {
/**
* 构造方法私有化(不让你创建对象)
*/
private ArrayTool(){}
/**
* 获取最大值
*
* @param array
* 数组
* @return 数组最大值
*/
public static int getMax(int[] array) {
int max = array[0];
for (int i = 0; i < array.length; i++) {
if (max < array[i]) {
array[i] = max;
}
}
return max;
}
/**
* 打印数组
*
* @param array
* 数组
*/
public static void soutArray(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
/**
* 数组反转
*
* @param array
*/
public static void changeArray(int[] array) {
// array[i] 和 array[length - 1 -i] 换
int num = array.length / 2;
for (int i = 0; i < num; i++) {
int t = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = t;
}
}
/**
* 选择排序
*
* @param array
* 数组
*/
public static void chooseSort(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
for (int j = 1 + i; j < array.length; j++) {
if (array[i] > array[j]) {
int t = array[i];
array[i] = array[j];
array[j] = t;
}
}
}
}
}
10.利用向对象的思想实现"石头剪刀布"的游戏
设计思路:(面向对象的思想)
需求
* 设计类 完成 石头 剪刀 布 游戏
* 人和电脑之间的
* 人 从键盘输入 石头 剪刀 布
* 电脑 随机出拳
* 根据游戏规则 判断输赢 打印
*
* 1.设计类(看看完成这个功能需要几个类)
* 2.设计类中的方法和属性
* 人类
* 出拳的方法
* 电脑类
* 出拳的方法
* 比较类(裁判类)
* 比较结果的方法
* 游戏开始类(组合前三个类中的逻辑)
* 游戏开始的方法(组装前面的方法 让游戏开始)
* 测试类
* 创建游戏开始类的对象 调用开始方法