(十)构造器、static、工具类

本文主要介绍了Java中的构造器、static关键字及其应用。详细讲解了构造器的作用、格式和重载,static的特点、注意事项以及静态变量和成员变量的区别。此外,还涉及到了main方法的格式和工具类中静态方法的使用。
摘要由CSDN通过智能技术生成

学习内容

复习

  1. 写在类里、方法外:属性,就是成员变量
    写在方法里:局部变量。

  2. “行为”就是方法。
    使用“对象”,写在方法里。

  3. 封装:把细节隐藏起来,使用方法封装。

  4. 属性:将属性私有化(private),不能够直接访问属性。
    需要提供公共的方法去让别人进行访问
    private:保证只能在本类中被访问
    public:属性的数据类型

  5. pojo类
    get属性首字母大写 {
    Return 属性;
    }
    Public void set属性名首字母大写(属性数据类型 变量名字) {
    this.属性名(成员变量) = 变量名字(局部变量);
    }

构造方法Constructor概述和格式(掌握)

  • A:构造方法概述和作用
    • 给对象的数据(属性)进行初始化
  • B:构造方法格式特点
    • a:方法名与类名相同(大小也要与类名一致)
    • b:没有返回值类型,连void都没有
    • c:没有具体的返回值return;

构造方法的重载及注意事项(掌握)

  • A:案例演示
    • 构造方法的重载
    • 重载:方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表
  • B:构造方法注意事项
    • a:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
    • b:如果我们给出了构造方法,系统将不再提供默认的无参构造方法。
      • 注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法

在这里插入图片描述

static关键字的特点(掌握)

  • A:static关键字的特点
    • a:随着类的加载而加载
    • b:优先于对象存在
    • c:被类的所有对象共享
      • 这个特点也是在告诉我们什么时候使用静态?
        • 如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。
      • 举例:
        • 饮水机(用静态修饰)
        • 水杯(不能用静态修饰)
        • 共性用静态,特性用非静态
    • d:可以通过类名调用
      • 其实它本身也可以通过对象名调用。
      • 推荐使用类名调用。
      • 静态修饰的内容一般我们称其为:与类相关的,类成员

static的注意事项(掌握)

  • A:static的注意事项
    • a:在静态方法中是没有this关键字的
      • 如何理解呢?
        • 静态是随着类的加载而加载,this是随着对象的创建而存在。
        • 静态比对象先存在。
    • b:静态方法只能访问静态的成员变量和静态的成员方法
      • 静态方法:
        • 成员变量:只能访问静态变量
        • 成员方法:只能访问静态成员方法
      • 非静态方法:
        • 成员变量:可以是静态的,也可以是非静态的
        • 成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
      • 简单记:
        • 静态只能访问静态。
  • B:案例演示
    • static的注意事项

静态变量和成员变量的区别(掌握)

  • 静态变量也叫类变量 成员变量也叫对象变量
  • A:所属不同
    • 静态变量属于类,所以也称为为类变量
    • 成员变量属于对象,所以也称为实例变量(对象变量)
  • B:内存中位置不同
    • 静态变量存储于方法区的静态区
    • 成员变量存储于堆内存
  • C:内存出现时间不同
    • 静态变量随着类的加载而加载,随着类的消失而消失
    • 成员变量随着对象的创建而存在,随着对象的消失而消失
  • D:调用不同
    • 静态变量可以通过类名调用,也可以通过对象调用
    • 成员变量只能通过对 象名调用

main方法的格式详细解释(了解)

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

工具类中使用静态(了解)

  • A:制作一个工具类
    • ArrayTool
    • 1,获取最大值
    • 2,数组的遍历
    • 3,数组的反转

如何使用JDK提供的帮助文档(了解)

  • A:找到文档,打开文档
  • B:点击显示,找到索引,出现输入框
  • C:你应该知道你找谁?举例:Scanner
  • D:看这个类的结构(需不需要导包)
    • 成员变量 字段
    • 构造方法 构造方法
    • 成员方法 方法

学习Math类的随机数功能(了解)

  • 打开JDK提供的帮助文档学习
  • A:Math类概述
    • 类包含用于执行基本数学运算的方法
  • B:Math类特点
    • 由于Math类在java.lang包下,所以不需要导包。
    • 因为它的成员全部是静态的,所以私有了构造方法
  • C:获取随机数的方法
    • public static double random():返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
  • D:我要获取一个1-100之间的随机数,肿么办?
    • int number = (int)(Math.random()*100)+1;

作业

  1. 设计一个圆柱体类,有属性半径、高,有求表面积和体积的方法。
    创建一个圆柱体的测试类,新建圆柱体对象,对半径和高进行赋值,测试求表面积和体积的方法。
    (1)

    public class Column {
           private double r;
           private double h;
           private double area;
           private double volume;   
           public double getR() {
                  return r;
           }
           public void setR(double r) {
                  this.r = r;
           }
           public double getH() {
                  return h;
           }
           public void setH(double h) {
                  this.h = h;
           }
           public double getArea() {
                  return area;
           }
           public void setArea(double area) {
                  this.area = area;
           }
           public double calArea() {
                  return 2 * 3.14 * r * h + 3.14 * r * r * 2;
           }
           public double getVolume() {
                  return volume;
           }
           public void setVolume(double volume) {
                  this.volume = volume;
           }
           public double calVolume() {
                  return 3.14 * r * r * h;
           }
    }
    

    (2)

    public class ColumnTest {
     	  public static void main(String[] args) {
              Column column = new Column();
              column.setR(3);
              column.setH(5); 
              
              System.out.println(column.calArea());
              System.out.println(column.calVolume());                            
          }
    }
    
  2. 设计一个Drug(药品)类,有属性:名称name,类型type,价格 price;
    设计一个Doctor(医生)类,有属性:姓名name,部门dept,电话 tel;
    设计一个Patient(患者)类,有属性:姓名name,身份证号id,性别 sex,
    年龄age;
    设计一个Case(病例)类,有属性:患者patient,医生doctor,用药记录drugs
    请根据实际情况设计以上类和属性。
    (1)

    public class Drug {
           private String dname;
           private String dtype;
           private double dprice;       
           public String getDname() {
                  return dname;
           }
           public void setDname(String dname) {
                  this.dname = dname;
           }
           public String getDtype() {
                  return dtype;
           }
           public void setDtype(String dtype) {
                  this.dtype = dtype;
           }
           public double getDprice() {
                  return dprice;
           }
           public void setDprice(double dprice) {
                  this.dprice = dprice;
           }
    }
    

    (2)

    public class Doctor {
           private String docname;
           private String docdept;
           private long doctel;       
           public String getDocname() {
                  return docname;
           }
           public void setDocname(String docname) {
                  this.docname = docname;
           }
           public String getDocdept() {
                  return docdept;
           }
           public void setDocdept(String docdept) {
                  this.docdept = docdept;
           }
           public long getDoctel() {
                  return doctel;
           }
           public void setDoctel(long doctel) {
                  this.doctel = doctel;
           }
    }
    

    (3)

    public class Patient {
           private String pname;
           private long pid;
           private String psex;
           private int page;       
           public String getPname() {
                  return pname;
           }
           public void setPname(String pname) {
                  this.pname = pname;
           }
           public long getPid() {
                  return pid;
           }
           public void setPid(long pid) {
                  this.pid = pid;
           }
           public String getPsex() {
                  return psex;
           }
           public void setPsex(String psex) {
                  this.psex = psex;
           }
           public int getPage() {
                  return page;
           }
           public void setPage(int page) {
                  this.page = page;
           }
    }
    

    (4)

    public class Case {
           private Patient patient;
           private Doctor doctor;
           private Drug[] drugs;       
           public String getPatient() {
                  return patient;
           }
           public void setPatient(Patient patient) {
                  this.patient = patient;
           }
           public String getDoctor() {
                  return doctor;
           }
           public void setDoctor(Doctor doctor) {
                  this.doctor = doctor;
           }
           public String getDrugs() {
                  return drugs;
    	}
           public void setDrugs(Drug drugs) {
                  this.drugs = drugs;
           }
    }
    
    1. 有以下信息
歌手歌曲名时长专辑
Taylor SwiftBlank Space4:322016 GRAMMY Nominees
林俊杰新地球4:37新地球
华晨宇4:30

设计一个类,将以上信息封装到实体类中,并打印输出。
(1)

public class Music {
       private String singer;
       private String music;
       private String time;
       private String demo;       
       public String getSinger() {
              return singer;
       }
       public void setSinger(String singer) {
              this.singer = singer;
       }
       public String getMusic() {
              return music;
       }
       public void setMusic(String music) {
              this.music = music;
       }
       public String getTime() {
              return time;
       }
       public void setTime(String time) {
              this.time = time;
       }
       public String getDemo() {
              return demo;
       }
       public void setDemo(String demo) {
              this.demo = demo;
       }       
       public Music() { }
       public Music(String singer, String music, String time, String demo) {
              this.singer = singer;
              this.music = music;
              this.time = time;
              this.demo = demo;
       }             
       public String show() {
              return singer + music + time + demo;
       }       
       public void show2() {
              System.out.println(singer + music + time + demo);
       }
}

(2)

public class MusicTest {
       public static void main(String[] args) {
       Music music0 = new Music("歌手\t\t","歌曲名\t\t","时长\t","专辑");
       Music music1 = new Music("Taylor Swift\t","Blank Space\t","4:32\t","2016 GRAMMY Nominees");
       Music music2 = new Music("林俊杰\t\t","新地球\t\t","4:37\t","新地球");
       Music music3 = new Music("华晨宇\t\t","寻\t\t","4:30\t","寻");
       music0.show2(); 
       music1.show2();
       music2.show2();
       music3.show2();       
       }
}
  1. 构造器(构造方法、构造函数)的作用是什么?书写格式是什么?
    答:(1)给对象的数据(属性)进行初始化。
    (2)构造方法格式特点:方法名与类名相同(大小也要与类名一致);没有返回值类型,连void都没有;没有具体的返回值return。

  2. 有一个类A,有以下两个构造方法

    public A(){
           this("Hello");
    }
    public A(String s){
           System.out.println(s);
    }
    测试类Test
    public class Test{
           public static void main(String[] args){
                  A a = new A();
           }
    }
    

    问:输出结果?为什么?
    Hello。
    调用无参构造器,this引用当前对象地址。

  3. this关键字代表什么?有几种用法?
    答:代表当前对象的引用;

  4. static关键字的作用是什么?
    静态修饰,优先加载。

总结

今天第三题写了poji类,new了好多个对象赋值,这个代码要写非常多行,我认为是种笨方法。
然后助教老师讲了一种使用构造器,然后再写一个show方法,就是作业上的第三题答案那种写法,突然觉得好省代码,老师还辅导我写了一个show2,直接在方法中写输出语句,就更简单了。
学习需要钻研,有许多种不同的方法,看哪一种更有效率。继续努力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值