目录
一、关于类图的设定
1、简述类图的画法
类名 |
---|
+(public)属性名:类型 -(private)属性名:类型 |
+方法名( ):返回值类型 |
2、画类图的几个工具介绍
- Visio
Visio是office软件系列中的负责绘制流程图和示意图的软件,是一款便于IT和商务人员就复杂信息、系统和流程进行可视化处理、分析和交流的软件。
- Rose
Rational Rose是Rational公司出品的一种面向对象的统一建模语言的可视化建模工具。用于可视化建模和公司级水平软件应用的组件构造。
- PowerDesigner
PowerDesigner是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与IT结合起来,可帮助部署有效的企业体系架构,并为研发生命周期管理提供强大的分析与设计技术。
二、构造方法
1、构造方法的介绍
构造方法是一种特殊的方法,它是一个与类同名且无返回值类型的方法。
构造方法的功能主要是完成对象的初始化。
对象的创建就是通过构造方法来完成,当类实例化一个对象时会自动调用构造方法。
2、语法说明:
访问修饰符 构造方法名 (数据类型 参数1,数据类型 参数2,… ) {
//初始化代码
}
3、注意事项
在没有给类提供任何构造方法时,系统会提供一个默认无参构造方法。
一旦提供了自定义构造方法,系统将不再提供这个无参构造方法。如果要使用它,则必须手动添加
4、示例
public class Penguin {
String name = "无名氏"; // 昵称
int health = 100; // 健康值
int love = 0; // 亲密度
String sex = "Q仔"; // 性别
final String SEX_MALE = "雄";
final String SEX_FEMALE = "雌";
/**
* 构造无参方法
*/
public Penguin() {
name = "楠楠";
love = 20;
sex = SEX_MALE;
}
}
三、方法重载
1、方法重载的主要说明
在同一个类中,方法名相同,通过参数个数和类型的不同来区分不同的方法,方法的重载跟返回值类型和修饰符无关。
2、举例说明
类的代码
/**
* @authorDesc 收获源于是每一分的努力
* @author Jule_zhou
* @date 2022-07-26 21:29:35
* @version
* @description
*/
public class StudentsInf {
public void show(){
System.out.println(45);
}
public void show(int a){
System.out.println(a);
}
public void show(double s){
System.out.println(s);
}
public int show(int a,double s){
System.out.println(a);
System.out.println(s);
return 0;
}
public int show(double s,int a){
System.out.println(a + s);
return 0;
}
}
测试类的使用
/**
* @authorDesc 收获源于是每一分的努力
* @author Jule_zhou
* @date 2022-07-26 21:37:55
* @version
* @description
*/
public class TestStudent {
public static void main(String[] args) {
StudentsInf studentsInf =new StudentsInf();
studentsInf.show();
studentsInf.show(45);
studentsInf.show(45.0);
studentsInf.show(45,45.0);
studentsInf.show(45.0,45);
}
}
代码对照:
3、实际运用
public class Calc {
public int getResult(int num1, int num2) {
return num1 + num2;
}
public double getResult(double num1, double num2, double num3) {
return num1 + num2 + num3;
}
}
四、构造方法
1、构造方法语法说明
在创建对象时,完成不同属性的动态赋值
构造方法的方法名与类名一致,该方法无返回值
public class 类名{
成员变量1;
成员变量2;
// 无参构造
public 类名() {
}
// 有参构造
public 类名(形参1,形参2) {
}
}
public class Penguin {
// 成员变量的声明
String name;
int health;
int love;
String sex;
// 无参构造方法
public Penguin() {
}
// 有参构造方法1
public Penguin(String name, String sex) {
this.name = name;
this.sex = sex;
}
// 有参构造方法2
public Penguin(String name, int health, int love, String sex) {
this.name = name;
this.health = health;
this.love = love;
this.sex = sex;
}
}
2、关于构造方法的重载说明
五、static修饰符
1、对于static的使用说明
- static可以用来修饰属性、方法和代码块
- static修饰的变量属于这个类所有,即由这个类创建的所有对象共用同一个static变量。
- 通常把static修饰的属性和方法称为类属性和类方法,不使用static修饰的属性和方法属于单个对象,通常称为实例属性和实例方法
2、对于static的详解
- 被static修饰的属性、方法和代码块将具有较高执行的优先级,在类的变量声明时会优先执行static修饰的属性、方法和代码块。
- 在同属static修饰时,依照代码的先后进行执行。
- static修饰的内容,独属于这个类
3、对于static修饰的内容,独属于这个类的讲解
类的代码
/**
* @authorDesc 收获源于是每一分的努力
* @author Jule_zhou
* @date 2022-07-26 22:05:50
* @version
* @description
*/
public class Trys {
// 用static修饰的
static String name ;
// 未用static修饰的
String text ;
}
测试类代码
/**
* @authorDesc 收获源于是每一分的努力
* @author Jule_zhou
* @date 2022-07-23 15:17:31
* @version
* @description Account测试类
*/
public class TestTrys {
public static void main(String[] args) {
Trys trys1 = new Trys();
Trys trys2 = new Trys();
trys1.name = "小明";
System.out.println("trys1:" + trys1.name);
trys2.name = "小红";
System.out.println("*******分割线*******");
System.out.println("trys1:" + trys1.name);
System.out.println("trys2:" + trys2.name);
System.out.println("***************分割线***************");
trys1.text = "结果1";
System.out.println("trys1:" + trys1.text);
System.out.println("*******分割线*******");
trys2.text = "结果2";
System.out.println("trys1:" + trys1.text);
System.out.println("trys2:" + trys2.text);
}
}
测试类执行结果
trys1:小明
*******分割线*******
trys1:小红
trys2:小红
***************分割线***************
trys1:结果1
*******分割线*******
trys1:结果1
trys2:结果2
Process finished with exit code 0
此时可以发现,经过static修饰过的内容,无论是trys1还是trys2,只要做出改变,另外的对象也会发生改变,因为static修饰过的内容独属于类本身,不会因创建的对象改变而发生改变,如果发生生改变,所有的对象引用的类都会发生改变。
4、代码示例
package com.bdqn.ready;
/**
* @authorDesc 收获源于是每一分的努力
* @author Jule_zhou
* @date 2022-07-26 22:32:15
* @version
* @description
*/
public class Trys {
static int i = 20;
static int m = 30;
int j;
int k = 25;
static{
i = 10;
System.out.println("i的初始值是:" + i);
//System.out.println("test static 1");
}
/*static{
i = 30;
System.out.println("i的初始值是:" + i);
//System.out.println("test static 2");
}*/
public Trys(){
j = 20;
System.out.println("j的初始值是:" + j);
//System.out.println("对象创建时i的值是:" + i);
//getNum();
}
public static void getNum(){
System.out.println("得到的i的值:" + i);
//get();
}
/*public void get(){
//static int i = 0;
}*/
public static void main(String[] args) {
System.out.println(Trys.i);
Trys trys = new Trys();
/*Trys trys2 = new Trys();*/
/*System.out.println(trys.i);
trys.i -= 5;
System.out.println(trys2.i);
System.out.println("**************************");
System.out.println(trys.k);
trys.k -= 5;
System.out.println(trys2.k);*/
System.out.println("i的值为:" + Trys.i);
Trys.getNum();
System.out.println("m的值是:" + trys.m);
System.out.println("k的值是:" + trys.k);
}
}
5、static修饰符总结
- 在加载类的过程中,完成静态变量的内存分配,再执行静态块,两者是在创建对象之前执行的。
- 类属性和类方法可以通过类名和对象名访问,实例属性和实例方法只能通过对象名访问。
- 类方法只能访问类属性和其他类方法,不能使用this和super关键字。
- 实例方法中不可以定义static变量
6、static修饰和非static修饰的区别
static、非private修饰 | 非static、private修饰 | |
---|---|---|
属性 | 类属性、类变量 | 实例属性、实例变量 |
方法 | 类方法 | 实例方法 |
调用方式 | 类名.属性 类名.方法() 对象.属性 对象.方法() | 对象.属性 对象.方法() |
归属 | 类 | 单个对象 |
六、封装
1、封装简介
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 。
2、封装的优点
- 便于使用者正确使用系统,防止错误修改属性
- 有助于系统之间的松耦合,提高系统独立性
- 提高软件的可重用性
- 降低了构建大型系统的风险
3、封装的具体步骤
4、权限修饰符的作用范围说明
封装时会用到多个权限修饰符来修饰成员变量和方法
作用域 修饰符 | 同一个类中 | 同一个包中 | 子类中 | 任何地方 |
---|---|---|---|---|
private | 可以 | 不可以 | 不可以 | 不可以 |
默认修饰符 | 可以 | 可以 | 不可以 | 不可以 |
protected | 可以 | 可以 | 可以 | 不可以 |
public | 可以 | 可以 | 可以 | 可以 |
5、封装示例
public class Dog {
private String name = "旺财"; // 昵称
private int health = 100; // 健康值
private int love = 0; // 亲密度
private String strain = "拉布拉多犬"; // 品种
public int getHealth() {
return health;
}
public void setHealth (int health) {
if (health > 100 || health < 0) {
this.health = 40;
System.out.println("健康值应该在0和100之间,默认值是40");
} else
this.health = health;
}
// 其它getter/setter方法
}
6、在IDEA中的快捷使用
最终效果:
package com.bdqn.ready;
/**
* @authorDesc 收获源于是每一分的努力
* @author Jule_zhou
* @date 2022-07-26 23:09:42
* @version
* @description
*/
public class Trys {
private int i;
private int m;
private int j;
private int k;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public int getM() {
return m;
}
public void setM(int m) {
this.m = m;
}
public int getJ() {
return j;
}
public void setJ(int j) {
this.j = j;
}
public int getK() {
return k;
}
public void setK(int k) {
this.k = k;
}
}