IT彭于晏带你学java之静态方法

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.设计类中的方法和属性
 * 人类
 * 		出拳的方法
 * 电脑类
 * 		出拳的方法
 * 比较类(裁判类)
 * 		比较结果的方法
 * 游戏开始类(组合前三个类中的逻辑)
 * 		游戏开始的方法(组装前面的方法 让游戏开始)
 * 测试类
 * 		创建游戏开始类的对象 调用开始方法



猜你喜欢

转载自blog.csdn.net/weixin_42120532/article/details/80259757