Java面向对象(基础)-- 属性赋值过程、JavaBean和UML类图

文章目录

  • 一、类中属性赋值过程
    • (1)实例变量与非实例变量
    • (2)实例变量赋值过程
    • (3)深层剖析
  • 二、JavaBean的理解
  • 三、读懂UML类图

一、类中属性赋值过程

(1)实例变量与非实例变量

【实例变量】

每个对象(实例)都有一份。

比如:

public class UserTest {
    public static void main(String[] args) {
        User u1=new User(); //u1有一份实例变量
        User u2=new User(); //u2也有一份实例变量
    }
}

class User{
    //属性(或实例变量) 实例-->对象   创建类的实例-->创建类的对象    实例变量-->下面两个变量归具体的对象所拥有
    String name;    //成员变量
    int age;
}

【非实例变量】

以后还会说到非实例变量,只要变量被static修饰了,它就是静态变量(类变量),这个变量的特点就是,对象共用这一个变量。

比如:

public class UserTest {
    public static void main(String[] args) {
        User u1=new User(); 
        User u2=new User(); 
    }
}

class User{
    String name;    //成员变量
    static int age;	//u1与u2共用这一个变量
}

(2)实例变量赋值过程

  1. 在类的属性中,可以有哪些位置给属性赋值?

(对象创建时的赋值操作)
① 默认初始化;
② 显式初始化;
③ 构造器中初始化;

…………………………………………………………………………

(对象创建以后的赋值操作)

④ 通过"对象.方法"的方式赋值;(比如set方法)

⑤ 通过"对象.属性"的方式赋值;(属性不要私有)

  1. 这些位置执行的先后顺序是怎样?

【猜测】
① - ② - ③ - ④/⑤

【实操】

①默认值

public class UserTest {
    public static void main(String[] args) {
        User u1=new User(); //u1有一份实例变量
        System.out.println(u1.age);
    }
}
class User{
    //属性(或实例变量) 
    String name;    
    int age;
}

运行结果:
image.png

②显示赋值

public class UserTest {
    public static void main(String[] args) {
        User u1=new User(); //u1有一份实例变量
        System.out.println(u1.age);
    }
}
class User{
    //属性(或实例变量) 
    String name;    
    int age=1;
}

运行结果:
image.png

显示赋值可以覆盖默认值。①->②

③构造器中赋值

public class UserTest {
    public static void main(String[] args) {
        User u1=new User(); //u1有一份实例变量
        System.out.println(u1.age);

        User u2=new User(2);
        System.out.println(u2.age);
    }
}
class User{
    String name;    //成员变量
    int age=1;

    public User(){

    }
    public User(int a){
        age=a;
    }
}

运行结果:
image.png

②->③

④与⑤不用测了,因为有了①、②、③才能有④、⑤。

  1. 以上操作在对象创建过程中可以执行的次数如何?

只能执行一次:①、②、③

可以多次执行:④、⑤

public class UserTest {
    public static void main(String[] args) {
        User u1=new User(); //u1有一份实例变量
        System.out.println(u1.age);

        User u2=new User(2);
        System.out.println(u2.age);
        u2.age=3;
        u2.age=5;//可以多次调用,也可以通过方法调用
    }
}
class User{
    String name;    //成员变量
    int age=1;

    public User(){

    }
    public User(int a){
        age=a;
    }
}

(3)深层剖析

【举例】

昨天写了一个案例,拿过来说一下。

跳转链接:https://blog.csdn.net/m0_55746113/article/details/134002260?spm=1001.2014.3001.5501

这一段代码:

【Customer.java】

package anli;

/**
 * ClassName: Customer
 * Package: anli
 * Description:
 * a. 声明三个私有对象属性:firstName、lastName和account。
 * b. 声明一个公有构造器,这个构造器带有两个代表对象属性的参数(f和l)
 * c. 声明两个公有存取器来访问该对象属性,方法getFirstName和getLastName返回相应的属性。
 * d. 声明setAccount 方法来对account属性赋值。
 * e. 声明getAccount 方法以获取account属性。
 * @Author 雨翼轻尘
 * @Create 2023/10/23 0023 12:37
 */
public class Customer {
    //属性
    private String firstName;
    private String lastName;
    private Account account;    //account是自定义类属性
    //在一个类(Customer)里面可以声明另外一个类(Account)的成员变量,
    // 另外这个类可以是系统提供现成的(比如String),也可以是自定义类(Account)


    //构造器
    //在创建对象的时候,并没有给account赋值,此时account是NULL,可以在下面的方法中对account属性赋值
    public Customer(String f,String l){
        firstName=f;
        lastName=l;
    }

    //方法
    //1.针对姓名只有get方法(相当于给名字属性私有化之后,并没有提供set方法,就是一旦设置好之后就不允许再改变了)
    public String getFirstName(){
        return firstName;
    }
    public String getLastName(){
        return lastName;
    }

    //2.针对account提供get和set方法
    public void setAccount(Account a){
        account=a;
    }
    public Account getAccount(){
        return account;
    }

}

<1> firstName和lastName

Java面向对象(基础)-- 属性赋值过程、JavaBean和UML类图_第1张图片

<2>account

Java面向对象(基础)-- 属性赋值过程、JavaBean和UML类图_第2张图片


<3>字节码文件

以前我们找字节码文件都要在out文件夹下面找:

Java面向对象(基础)-- 属性赋值过程、JavaBean和UML类图_第3张图片

现在我们安装一个插件,用来解析字节码文件。

“文件”–> “设置”:

Java面向对象(基础)-- 属性赋值过程、JavaBean和UML类图_第4张图片

“插件”–>Markerplace–>搜索jclasslib,安装即可:

Java面向对象(基础)-- 属性赋值过程、JavaBean和UML类图_第5张图片


比如我现在想看User类的字节码文件,就把光标放在User类的大括号中间任何一个位置

Java面向对象(基础)-- 属性赋值过程、JavaBean和UML类图_第6张图片

然后点击这里,编译一下:

Java面向对象(基础)-- 属性赋值过程、JavaBean和UML类图_第7张图片

刚才安装完插件之后,在“视图”下面就可以看见它,点击:

Java面向对象(基础)-- 属性赋值过程、JavaBean和UML类图_第8张图片

看一下:

Java面向对象(基础)-- 属性赋值过程、JavaBean和UML类图_第9张图片

字节码文件中,它将构造器转化为了一种特殊的方法–init方法。

比如这个User构造器:

Java面向对象(基础)-- 属性赋值过程、JavaBean和UML类图_第10张图片


再说明一下:

Java面向对象(基础)-- 属性赋值过程、JavaBean和UML类图_第11张图片

二、JavaBean的理解

  • JavaBean是一种Java语言写成的可重用组件。
    • 好比你做了一个扳手,这个扳手会在很多地方被拿去用。这个扳手也提供多种功能(你可以拿 这个扳手扳、锤、撬等等),而这个扳手就是一个组件。
  • 所谓JavaBean,是指符合如下标准的Java类:
    • 类是公共的 (public)
    • 有一个无参的公共的构造器
    • 有属性,且有对应的get、set方法

【举例】
Java面向对象(基础)-- 属性赋值过程、JavaBean和UML类图_第12张图片

【实例】

举个实际案例:

Java面向对象(基础)-- 属性赋值过程、JavaBean和UML类图_第13张图片

后期在造具体对象的时候,把对象所属的类都设置为JavaBean,方便写出偏同一性的代码(都用空参构造器,都用set方法去设置)。

【Customer.java】

package yuyi;

import java.sql.Date;

/**
 * ClassName: Customer
 * Package: yuyi
 * Description:
 * 所谓JavaBean,是指符合如下标准的Java类:
 *   ○ 类是公共的 (public)
 *   ○ 有一个无参的公共的构造器
 *   ○ 有属性,且有对应的get、set方法
 * @Author 雨翼轻尘
 * @Create 2023/10/24 0024 16:35
 */
public class Customer {
    //1.类是公共的 public
    
    //2.此时默认构造器就是无参公共的,可写可不写
    public Customer(){

    }
    
    //3.属性
    private int id;
    private String name;
    private String email;
    private Date birth;
    
    //id
    public void setId(int i){
        id=i;
    }
    public int getId(){
        return id;
    }
    
    //name
    public void setName(String n){
        name=n;
    }
    public String getName(){
        return name;
    }
    
    //email
    public void setEmail(String e){
        email=e;
    }
    public String getEmail(){
        return email;
    }
    
    //birth
    public void setBirth(Date d){
        birth=d;
    }
    public Date getBirth(){
        return birth;
    }
}

  • 用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用Java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何 改变。
  • 《Think in Java》中提到,JavaBean最初是为Java GUI的可视化编程实现的。你拖动IDE构建工具创 建一个GUI 组件(如多选框),其实是工具给你创建Java类,并提供将类的属性暴露出来给你修改 调整,将事件监听器暴露出来。

三、读懂UML类图

  • UML(Unified Modeling Language,统一建模语言),用来描述 软件模型架构 的图形化语言。
  • 常用的UML工具软件有 PowerDesinger 、 Rose 和 Enterprise Architect 。

比如用PowerDesinger画的:
Java面向对象(基础)-- 属性赋值过程、JavaBean和UML类图_第14张图片

  • UML工具软件不仅可以绘制软件开发中所需的各种图表,还可以生成对应的源代码。
  • 在软件开发中,使用 UML类图 可以更加直观地描述类内部结构(类的属性和操作)以及类之间的关系(如关联、依赖、聚合等)。
    • +表示 public 类型, - 表示 private 类型,#表示protected类型 ,没写就是缺省(很少)
    • 方法的写法: 方法的类型(+、-) 方法名(参数名: 参数类型):返回值类型
    • 斜体表示抽象方法或类。
    • 若方法有下划线,则是构造器,括号里面是形参名,形参类型。(构造器没有返回值)

Java面向对象(基础)-- 属性赋值过程、JavaBean和UML类图_第15张图片

Account(init balance:double) :是构造器,括号里面是形参名,形参类型。(构造器没有返回值)

getBalance():double :该方法返回值类型是double(冒号后面)。

deposit(amt:double) :该方法小括号里面是形参名和形参的类型,小括号后面没有冒号表示这个方法返回值类型是void。

目前只需要能看得懂UML类图就好了。

你可能感兴趣的:(Java基础,1024程序员节,属性赋值顺序,JavaBean,UML图,面向对象(基础))