* 构造方法注意:
* 当你这个类中没有提供无参的构造方法的时候 * 系统会在你创建对象是也会调用无参方法 * 系统帮你提供一个 * 如果你 只 提供一个有参的构造方法 那么系统不会给提供无参构造方法 * * 建议:写类时 无参有参构造方法都要写上;
* 静态变量也叫类变量(相当于一个共享的变量 每个对象都能访问到)
* 使用关键词 static 修饰属性
*
* 静态变量的调用
* 1.可以使用对象直接调用(不建议) * 2.使用类名直接调用(建议) * 使用类名调静态变量可以 和 成员变量区分 * 直接使用类名调用跟准确 有静态变量时 对象 还没创建
* 静态变量好处
* 1.节约内存(静态变量是一个共享的变量) * 举例:老师被所有学生共享 * 水杯 饮水机
* 静态变量和成员变量的区别
*1.所属不同 *静态变量:属于类 也叫类变量 *成员变量:属于对象的 也叫对象变量(实例变量) *2 内存所处的位置不同 *静态变量:方法区中的静态区 *成员变量:堆区中 *3.内存中加载时期不同 *静态变量:随着类的加载而加载 随着类的销毁而销毁 程序结束后 *成员变量:随着对象的创建而创建 随着对象的销毁而销毁 *4.调用不同 *静态变量:使用对象名或者类名 类名推荐 *成员变量:只能使用对象名
*
* 对象再内存中的表现步骤
* 1.加载有main函数的类的class文件到 方法区中 * 2.main方法入栈(需要创建AV对象) * 3.先把AV.class文件加载到 方法区中 * 4.然后才可以在 堆内存中 开辟空间 创建AV对象 * 5.赋值方法入栈 赋完值出站 * 6.main函数方法执行完毕 出栈 * 7.程序结束
public class Demo03 { public static void main(String[] args) { Av girl1 = new Av(); girl1.name = "苍老师"; Av.country = "日本"; Av girl2 = new Av(); girl2.name = "小泽"; // girl2.country = "日本"; girl2.sayHi(); girl1.sayHi(); } } class Av { String name;// 姓名 static String country;// 国籍 //思考:构造方法能不能用private修饰 public Av() { } public void sayHi() { System.out.println(name + ".." + country); } }
构造方法例子
* 需求:
* 创建一个长方形的类
* 设计
* 成员变量 和 方法
* 计算周长和面积
* 要求:
* 1.构造方法
* 2.set/get方法
* 3.成员变量私有化
* 4.计算周长和面积是成员方法
package com.lanou3g; public class Demo02 { public static void main(String[] args) { Cfx cfx = new Cfx(10,34); //cfx.setCheng(20); //cfx.setKuan(20); cfx.sayHi(); } } class Cfx{ private int cheng;//高 private int kuan;//宽 private int permeter;//周长 private int area;//面积 //无参构造方法 public Cfx() { } //有参构造方法 public Cfx(int cheng, int kuan) { this.cheng=cheng; this.kuan=kuan; //通过计算给成员变量赋值 this.permeter=(cheng+kuan)*2; this.area=cheng*kuan; } /*//面积 public int mianJi() { return cheng*kuan; } //周长 public int zhouChang() { return (cheng+kuan)*2; }*/ //介绍自己方法 public void sayHi() { System.out.println("长"+cheng); System.out.println("宽"+kuan); System.out.println("面积"+area); System.out.println("周长"+permeter); } public int getCheng() { return cheng ; } public void setCheng(int cheng) { this.cheng=cheng; } public int getKuan() { return kuan ; } public void setKuan(int kuan) { this.kuan=kuan; } }
* 静态方法
package com.lanou3g; public class Demo04 { } class Test{ int num1=10; static int num2=20; /* * 成员方法中 既可以使用成员变量 也可以使用静态变量 */ public void fun1() { System.out.println(this.num1); System.out.println(Test.num2); } /* * 静态方法(类方法):随着类的加载而加载(和静态变量一样) * 静态方法的执行和成员方法一样 在栈内存执行 入栈出栈 * 静态方法中不能使用成员变量(静态方法加载时 还没有对象) * * 静态只能调用静态的 * 成员的既能调用成员的 也能调用静态的 */ public static void fun2() { //System.out.println(num1); System.out.println(num2); fun3(); } public static void fun3() { System.out.println("fun3"); } }
* 编写工具类
package com.lanou3g; public class ArrayTest { public static void main(String[] args) { /* * 编写工具类 * 1.一般所有方法使用静态的 方便调用 * 2.构造方法 私有化(对象对于这个类没有用) */ int[] array= {1,2,3,4,5}; //ArrayTool tool = new ArrayTool(); ArrayTool.changeArray(array); ArrayTool.printArray(array); } }
package com.lanou3g; import java.sql.Array; import java.util.Arrays; import org.omg.CORBA.PUBLIC_MEMBER; /* * 编译文档命令 * javadoc -d (文件名) -version -author 文件名.java */ /** * 数组的工具类 * 获取数组最大值 * 打印数组 * 数组反转 * 选择排序 * @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 = 1; i < array.length; i++) { if(max < array[i]) { max = array[i]; } } return max; } /** * 打印数组 * @param array 数组 */ public static void printArray(int[] array) { for (int i = 0; i < array.length; i++) { } System.out.println(Arrays.toString(array)); } /** * 数组反转 * @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 temp = array[i]; array[i] = array[array.length - 1 - i]; array[array.length - 1 - i] = temp; } } /** * 选择排序 * @param array 数组 */ public static void chooseSort(int[] array) { for (int i = 0; i < array.length-1; i++) { for (int j = i+1; j < array.length; j++) { if(array[i]>array[j]) { int temp = array[j]; array[j]=array[i]; array[i]=temp; } } } } }
解析main函数
* public jvm调用 main方法 的时候 需要最高的权限 * static 调用静态方法 是不需要创建对象 * main 不是关键词 当程序运行时jvm只会调用 使用类名调用 一个叫main的函数 * String[] args 原来是 用来接受 键盘输入 的字符串 * (可以使用 javac和java指令测试)
public class Demo05 { public static void main(String[] args) { //获取数组长度 System.out.println(args.length); //遍历数组 for (int i = 0; i < args.length; i++) { System.out.println(args[i]); } }