【实例变量】
每个对象(实例)都有一份。
比如:
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共用这一个变量
}
(对象创建时的赋值操作)
① 默认初始化;
② 显式初始化;
③ 构造器中初始化;
…………………………………………………………………………
(对象创建以后的赋值操作)
④ 通过"对象.方法"的方式赋值;(比如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;
}
}
【举例】
昨天写了一个案例,拿过来说一下。
跳转链接: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
<2>account
<3>字节码文件
以前我们找字节码文件都要在out文件夹下面找:
现在我们安装一个插件,用来解析字节码文件。
“文件”–> “设置”:
“插件”–>Markerplace–>搜索jclasslib
,安装即可:
比如我现在想看User类
的字节码文件,就把光标放在User类的大括号中间任何一个位置。
然后点击这里,编译一下:
刚才安装完插件之后,在“视图”下面就可以看见它,点击:
看一下:
在字节码文件中,它将构造器转化为了一种特殊的方法–init
方法。
比如这个User构造器:
再说明一下:
JavaBean
是一种Java语言写成的可重用组件。
JavaBean
,是指符合如下标准的Java类:
【实例】
举个实际案例:
后期在造具体对象的时候,把对象所属的类都设置为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;
}
}
软件模型
和 架构
的图形化语言。UML类图
可以更加直观地描述类内部结构(类的属性和操作)以及类之间的关系(如关联、依赖、聚合等)。
+
表示 public 类型, -
表示 private 类型,#
表示protected类型 ,没写就是缺省(很少)斜体
表示抽象方法或类。下划线
,则是构造器,括号里面是形参名,形参类型。(构造器没有返回值)Account(init balance:double)
:是构造器,括号里面是形参名,形参类型。(构造器没有返回值)
getBalance():double
:该方法返回值类型是double(冒号后面)。
deposit(amt:double)
:该方法小括号里面是形参名和形参的类型,小括号后面没有冒号表示这个方法返回值类型是void。
目前只需要能看得懂UML类图就好了。