面向对象(基础)"/>
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)实例变量赋值过程
- 在类的属性中,可以有哪些位置给属性赋值?
(对象创建时的赋值操作)
① 默认初始化;
② 显式初始化;
③ 构造器中初始化;
…………………………………………………………………………
(对象创建以后的赋值操作)
④ 通过"对象.方法"的方式赋值;(比如set方法)
⑤ 通过"对象.属性"的方式赋值;(属性不要私有)
- 这些位置执行的先后顺序是怎样?
【猜测】
① - ② - ③ - ④/⑤
【实操】
①默认值
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;}
}
运行结果:
②->③
④与⑤不用测了,因为有了①、②、③才能有④、⑤。
- 以上操作在对象创建过程中可以执行的次数如何?
只能执行一次:①、②、③
可以多次执行:④、⑤
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面向对象(基础)
发布评论