* 构造方法注意:
* 当你这个类中没有提供无参的构造方法的时候
* 系统会在你创建对象是也会调用无参方法
* 系统帮你提供一个
* 如果你 只 提供一个有参的构造方法 那么系统不会给提供无参构造方法
*
* 建议:写类时 无参有参构造方法都要写上;
* 静态变量也叫类变量(相当于一个共享的变量 每个对象都能访问到)
* 使用关键词 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]);
}
}