学习内容
复习
-
写在类里、方法外:属性,就是成员变量。
写在方法里:局部变量。 -
“行为”就是方法。
使用“对象”,写在方法里。 -
封装:把细节隐藏起来,使用方法封装。
-
属性:将属性私有化(private),不能够直接访问属性。
需要提供公共的方法去让别人进行访问
private:保证只能在本类中被访问
public:属性的数据类型 -
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:静态方法只能访问静态的成员变量和静态的成员方法
- 静态方法:
- 成员变量:只能访问静态变量
- 成员方法:只能访问静态成员方法
- 非静态方法:
- 成员变量:可以是静态的,也可以是非静态的
- 成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
- 简单记:
- 静态只能访问静态。
- 静态方法:
- a:在静态方法中是没有this关键字的
- 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)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()); } }
-
设计一个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; } }
- 有以下信息
歌手 | 歌曲名 | 时长 | 专辑 |
---|---|---|---|
Taylor Swift | Blank Space | 4:32 | 2016 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)给对象的数据(属性)进行初始化。
(2)构造方法格式特点:方法名与类名相同(大小也要与类名一致);没有返回值类型,连void都没有;没有具体的返回值return。 -
有一个类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引用当前对象地址。 -
this关键字代表什么?有几种用法?
答:代表当前对象的引用; -
static关键字的作用是什么?
静态修饰,优先加载。
总结
今天第三题写了poji类,new了好多个对象赋值,这个代码要写非常多行,我认为是种笨方法。
然后助教老师讲了一种使用构造器,然后再写一个show方法,就是作业上的第三题答案那种写法,突然觉得好省代码,老师还辅导我写了一个show2,直接在方法中写输出语句,就更简单了。
学习需要钻研,有许多种不同的方法,看哪一种更有效率。继续努力。