学习日记33--java基础学习3--构造方法和static方法

  1. new对象时,都是用构造方法进行实例化的;
    例如;Test test = new Test(”a”);
    //Test(”a”);其中这个就是构造函数,“a”为构造方法的形参;
    构造方法的方法名必须与类名一样。
    构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
    构造方法不能作用是完成对象的初始化工作,他能够把定义对象时的参数传递给对象的域。
    构造方法不能由编程人员调用,而要系统调用。
    构造方法可以重载,以参数的个数,类型,或排序顺序区分。
  2. 构造方法的重载:方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表
    • 如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
    • 如果我们给出了构造方法,系统将不再提供默认的无参构造方法。
  3. setXxx()方法和构造函数是两种主要的给成员变量赋值的方法.

    • 构造方法 –> 给对象中属性进行初始化
    • setXxx()方法 –>修改属性值 ,推荐使用,比较灵活
  4. 一个对象的创建过程做了哪些事情?

    • Student s = new Student();
    • Student.class加载进内存
    • 声明一个Student类型引用s
    • 在堆内存创建对象,
    • 给对象中属性默认初始化值
    • 属性进行显示初始化
    • 构造方法进栈,对对象中的属性赋值,构造方法弹栈
    • 将对象的地址值赋值给s
  5. static关键字的特点

    • 随着类的加载而加载
    • 优先于对象存在
    • 被类的所有对象共享
    • 与非静态不同的是,静态可以通过类名直接调用,而不一定先创建对象,而且通常推荐用类名调用。
    • 非静态的成员方法,既可以访问静态的成员也可以访问非静态的
    • 静态的成员方法不能访问非静态的,会报错(错误:无法从静态上下文中引用非静态 变量xx)
    • 在静态方法中是没有this关键字的,因为this在创建对象的时候才有值(静态是随着类的加载而加载,静态比对象先存在。)
  6. 静态变量和成员变量的区别: 静态变量也叫类变量 成员变量也叫对象变量

    • 所属不同
      • 静态变量属于类,所以也称为为类变量
      • 成员变量属于对象,所以也称为实例变量(对象变量)
    • 内存中位置不同
      • 静态变量存储于方法区的静态区
      • 成员变量存储于堆内存
    • 内存出现时间不同
      • 静态变量随着类的加载而加载,随着类的消失而消失
      • 成员变量随着对象的创建而存在,随着对象的消失而消失
    • 调用不同
      • 静态变量可以通过类名调用,也可以通过对象调用
      • 成员变量只能通过对 象名调用
  7. mian方法的格式的详细解释 public static void main(String[] args) {}

    • public: 被jvm调用,访问权限足够大。
    • static: 被jvm调用,不用创建对象,直接类名访问
    • void: 被jvm调用,不需要给jvm返回值
    • main: 只有这样写才能被jvm识别,main不是关键字
    • String[] args: 以前用于接收键盘录入的,先多用Scanner类来实现
  8. 制作一个工具类(用static方法)

    /**
    这是一个数组工具类,里面封装了查找数组最大值,打印数组,数组反转的方法
    @author fengjia
    @version v1.0
    */
    public class ArrayTool {
    //如果一个类中所有的方法都是静态的,需要再多做一步,私有构造方法,目的是不让其他类创建本类对象
    //直接用类名.调用即可
    /**
    私有构造方法
    */
    private ArrayTool(){}
    
    //1,获取最大值
    
    /**
    这是获取数组中最大值的方法
    @param arr 接收一个int类型数组
    @return 返回数组中最大值
    */
    public static int getMax(int[] arr) {
        int max = arr[0];                       //记录第一个元素
        for (int i = 1;i < arr.length ;i++ ) {  //从第二个元素开始遍历
            if (max < arr[i]) {                 //max与数组中其他的元素比较
                max = arr[i];                   //记录住较大的
            }
        }
    
        return max;                             //将最大值返回
    }
    //2,数组的遍历
    /**
    这是遍历数组的方法
    @param arr 接收一个int类型数组
    */
    public static void print(int[] arr) {
        for (int i = 0;i < arr.length ;i++ ) {  //遍历数组
            System.out.print(arr[i] + " ");
        }
    }
    //3,数组的反转
    /**
    这是数组反转的方法
    @param arr 接收一个int类型数组
    */
    public static void revArray(int[] arr) {
        for (int i = 0;i < arr.length / 2 ;i++ ) {  //循环次数是元素个数的一半
            /*
            arr[0]与arr[arr.length-1-0]  交换
            arr[1]与arr[arr.length-1-1]  交换
            arr[2]与arr[arr.length-1-2] 交换
            */
            int temp = arr[i];
            arr[i] = arr[arr.length-1-i];
            arr[arr.length-1-i] = temp;
        }
    }
    }

    调用时,直接使用类名调用.如: ArrayTool.print(arr);

  9. 说明书的制作过程

    • 对工具类加入文档注释(见8中的例子)
    • 通过javadoc命令生成说明书
    • @author(提取作者内容)
    • @version(提取版本内容)
    • @param 参数名称//形式参数的变量名称
    • @return 函数运行完返回的数据
    • 在当前路径打开cmd窗口,输入: javadoc -d 文件夹名 -author -version ArrayTool.java,即可创建文件夹下的index目录
  10. 当一个类中所有方法都是静态的,就需要创建一个私有的构造方法.目的是为了不让创建对象,因为直接用类名调用即可

  11. 实例:猜数字小游戏

    /*
    * 猜数字小游戏(数据在1-100之间)
    */
    import java.util.Scanner;
    class Test1_GuessNum {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);                //创建键盘录入对象
        System.out.println("请输入一个整数,范围在1-100之间");
        int guessNum = (int)(Math.random() * 100) + 1;      //心里想的随机数
        while (true) {                                      //因为需要猜很多次,所以用无限循环
            int result = sc.nextInt();                      //大家猜的数
            if (result > guessNum) {                        //如果你们猜的数大于了我心里想的数
                System.out.println("大了");                   //提示大了
            } else if (result < guessNum) {                 //如果你们猜的数小于了我心里想的数
                System.out.println("小了");                   //提示小了
            } else {                                        //如果既不大也不小
                System.out.println("中了");                   //中了
                break;
            }
        }
    }
    }
    
    

猜你喜欢

转载自blog.csdn.net/dershine/article/details/82026264