构造方法和static关键字的使用

构造方法概述和格式

* 构造方法概述和作用
    * 给对象的数据(属性) 进行初始化 
* 构造方法的格式特点
    * a格式:修饰符 类名(参数类型 参数名){代码块 }
    * 方法名和类名相同
    * 没有返回值类型 连void也没有
    * 没有具体的返回值 return 
* 构造方法的重载及注意事项
    * 构造方法重载
        * 重载:方法名相同  返回值类型无关 只看参数列表 
    * 构造方法注意事项
        * a:如果我们没有给构造方法 系统默认会给一个空参构造方法
        * b:如果有构造方法 系统不再给一个空参构造方法 

给成员变量赋值的两种方式的区别

* A:setXXX()方法 修改属性值
* B:构造方法  给属性进行初始化
* 区别:这两种方式 在开发中用setXXX更多一些 因为比较灵活

学生类的代码及测试

* 案例演示
    * 成员变量
        * name age  
    * 构造方法
        * 无参 带两个参数 
    * 成员方法 
        * getXXX() setXXX()
        * show(); 
        * 区别:show()只是显示 getXXX()获取属性值 可以打印 也可以赋值给其他的变量
* 给成员变量赋值
    * setXXX() 修改属性值
    * 构造方法  给属性初始化 
    * 区别: 
* 输出成员变量值的方法 
    * getXXX
    * 自定义一个成员方法show

手机类的代码及测试

* 案例演示
    * 成员变量
        * brand price  
    * 构造方法
        * 无参构造
        * 有参构造 
    * 成员方法 
        * getXXX()  setXXX()
        * show() 

创建一个对象的步骤 Student stu = new Student();

* 1 Student.class加载进方法区
* 2 在栈的main方法中声明Student的引用类型
* 3 在堆中为new Student() 创造空间
* 4 成员变量默认初始化值(是null和0)
* 5 成员变量显示初始化值( 成员变量声明的同时赋值)
* 6 在栈中 构造方法进栈 为Student的成员变量赋值  然后弹栈
* 7 将堆中new出来的对象地址值传给Student的引用类型

长方形案例

* 案例演示
    * 需求:
        * 定义一个长方形类 定义 求周长和面积的方法
        * 然后定义一个测试类进行测试
    * 成员变量
        * length width 
    * 构造方法
        * 无参构造
        * 有参构造 
    * 成员方法
        * getXXX()  setXXX();
        * getPerimeter() getArea() 
        * **自己出错:在getPerimeter()和getArea()中设置参数**

员工类案例练习

* 需求:定义一个员工类Employee 
* 成员变量
    * id  name  salary
* 构造方法
    * 无参 有参 
* 成员方法
    * getxxx() setxxx()
    * work()显示员工信息; 

static 关键字的特点

* A:static关键字的特点、
    * a,随着类的加载面加截
    * b,优先于对象存在
    * c,被类的所有对象共享
     * 咱们班级的学生应该共用同一个班级编号
     * 什么时候使用静态?
        * 如果某个成员变量是被所有对象共享的 那么它就应该定义为静态
     * 举例
        * 饮水机(静态修饰 都用同一个饮水机)
        * 水杯(非静态 每个人的水杯不一样) 
    * 可以通过类名调用
     * 静态变量(类变量) 静态方法 (类方法)      

static的注意事项

* static的注意事项
    * 静态方法中是没有this关键字的
        * 静态是随着类的加载而加载  this是随着对象的创建而存在
        * 静态比对象先存在  所以在静态方法中调用的this是不存在的 
    * 静态方法只能访问静态的成员变量和静态的成员方法
        * 静态方法
            * 成员变量:只能访问静态变量
            * 成员方法: 只能访问静态方法
            * 原因:静态成员随着类的加载而创建  非静态成员随着对象创建而存在  调用静态成员时非静态成员可能没有创建
        * 非静态方法
            * 成员变量:可以是静态 也可以是非静态
            * 成员方法:可以是静态成员方法 也可以是非静态方法 
        * 简单记
         * 静态只能访问静态   

静态变量和成员变量的区别

* 静态变量也叫类变量  成员变量也叫对象变量
* A,所属不同 
    * 静态变量属于类  也叫类变量
    * 成员变量属于对象  也叫对象变量 
* B,内存中的位置不同
    * 静态变量:方法区的静态区
    * 成员变量:堆内存中 
* C,内存中出现的时间不同
    * 静态变量:随着类的加载而加载
    * 成员变量:随着对象的创建而加载
* D,调用不同
    * 静态变量:通过类名调用 也可以通过对象调用
    * 成员变量:通过对象调用 

main方法的格式详细解释

* A:格式
    * public static void main(String[] args){} 
* B:针对格式的解释
    * public 被JVM调用 访问权限足够大
    * static 被JVM调用  不用创建对象  直接类名访问
    * void   被JVM调用 不需要给JVM返回值
    * main 一个通用的名称 虽然不是关键字 但是被jvm识别
    * String[] args 以前用于接收键盘的录入 
* 演示案例

工具类中使用静态

  • A制作一个工具类

    • ArrayTool
    • 获取最大值
    • 数组的遍历
    • 数组的反转

      /*  
      数组的反转
          返回值类型 void
          参数列表:int[] nums
          分析:交换数组元素值  交换次数:数组长度除2 
          创建一个临时变量存放交换值   
      */
      
      public static void revArray(int[] nums){
      
          for (int i = 0; i

      工具类里最好都是静态方法 可以省略创建对象调用节约内存空间我们可以私有化构造方法(不能创建对象,只能通过类名调用静态方法)

说明书的制作过程

  • A,对工具类加入文档注释
    /* /
  • B,通过javadoc命令生成说明书
    • @author
    • @version
    • javadoc -d
    • @param

学习Math类的随机数功能

  • 生成1-100的数

     * 分析:
            * Math.random()可以生成0-1的随机小数
            * Math.random()*100生成0-100的随机小数
            * (int)Math.random()*100 生成0-99的整数
            * (int(Math.random()*100)+1 生成1-100的整数
    

Math类的小游戏

  • A:案例演示

    • 需求:猜数字小游戏(数据在1-100之间)

      * 分析:
      * 1,利用Math.random()获取一个1-100之间的数字
      * 2,使用Scanner获取一个猜的数字
      * 3,设置一个for循环
      * 4,如果大于随机数 输出大了
      * 5,如果小于随机数 输出小了
      * 6,刚好等于 就输出中了
      

你可能感兴趣的:(JAVA基础)