Java面向对象(基础)

编程入门 行业动态 更新时间:2024-10-28 00:27:57

Java<a href=https://www.elefans.com/category/jswz/34/1769334.html style=面向对象(基础)"/>

Java面向对象(基础)

文章目录

  • 一、类中属性赋值过程
    • (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;
}

运行结果:

②显示赋值

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;
}

运行结果:

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

③构造器中赋值

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;}
}

运行结果:

②->③

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

  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)深层剖析

【举例】

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

跳转链接:=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

<2>account


<3>字节码文件

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

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

“文件”–> “设置”:

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


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

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

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

看一下:

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

比如这个User构造器:


再说明一下:

二、JavaBean的理解

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

【举例】

【实例】

举个实际案例:

后期在造具体对象的时候,把对象所属的类都设置为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;//idpublic void setId(int i){id=i;}public int getId(){return id;}//namepublic void setName(String n){name=n;}public String getName(){return name;}//emailpublic void setEmail(String e){email=e;}public String getEmail(){return email;}//birthpublic 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画的:

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

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

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

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

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

更多推荐

Java面向对象(基础)

本文发布于:2023-12-03 21:05:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1657641.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:面向对象   基础   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!