封装
封装的概念:
- 将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏的信息进行操作和访问。
好处:
- (1)只能通过规定的方法访问数据
- (2)隐藏类的实例细节,方便修改和实现。
封装的实现步骤
- (1)修改属性的可见性设为(private)
- (2)创建getter/setter方法(用于属性的读写)(通过这两种方法对数据进行获取和设定,对象通过调用这两种发方法实现对数据的读写)
- (3)在getter/setter方法中加入属性控制语句(对属性值的合法性进行判断)
修饰符
private、public、默认、protected。
四种修饰符可以修饰:方法、属性、构造器、内部类。
- private私有的关键字,通过private修饰的成员(方法和变量)就只能在本类中使用,在其他类中不可以使用。
- private提倡高内聚低耦合,把细节隐藏,提供开放的接口给外部使用。高内聚:隐藏程序实现的细节,避免外界的干涉。低耦合:对外部暴露一些方法,提供为外部使用。
- 自动生成get/set方法,快捷键:Alt+Shift+s,Generate Getters and Getters…
- 其他:格式化代码快捷键:Ctrl+Shift+f,也是当前电脑的繁体字切换快捷键
一、构造器
特点:
1.与类相同的名称
2.没有返回值
3.可以重载
注意:在构造方法里不含返回值的概念不同于“void”,加了“void”那就不是构造方法了,就变成一个普通的方法,需要手动去调用才可以使用。
作用:用来初始化类的,当创建类的实例的时候,构造方法会自动调用。只要new出对象就会自动调用构造方法。
默认构造方法:如果一个类没有写构造方法,在编译的时候,编译器会分配一个空的构造方法,如果你写了一个或者多个编译器不会给默认的构造方法。
构造方法的重载:和普通方法的重载规则是一致的。方法名一样,参数列表不同。
二、关键字this
this:代表是当前对象
扩展:类是不能直接使用的,只能通过new创建一个对象,才可以使用。this指向的是将来需要创建(new)的对象。
用法:
1.在类本身的方法或构造器调用,引用该类的成员变量或成员方法。
2.this()表示的是显示调用重载的构造器。注意:必须放在构造器中的第一行。
3.将当前对象作为参数传递给其他方法或构造器。
三、package关键字
包的声明:创建包,包在window系统中就是一个文件夹,linux系统下就是目录。
包的命名规则:
1.一般为小写
2.一般为公司的域名的逆序+项目名称+项目的模块名称+子模块名称
如:erp系统包名结构:com.baidu.erp.service.impl
3.类名相同不能在同一个包中,可以位于不同的包中,类的首字母通常是大写的
Java中的包
四、import关键字
注意事项:
- 1.在java中导包可能会有多个不同的包有同样的方法,
如: List 有java.awt.List 和java.util.List
Date 有java.util.Date 和 java.sql.Date - 2.package 关键字位于第一行代码,import不能放在其前面
- 3.导入util包中的所有类(接口等),但是不包括其子包的类
五、项目的分层结构
总体四层,视图层(view)= =》业务逻辑层(***Service)= =》数据持久层(***Dao)= =》数据库管理系统(DBMS)
分层结构就是封装的一个表现,也是我们学习代码的一个重要思想,所以不要轻视封装,做为java面向对象三大特性之首,肯定是有他的道理的,封装理解不难,可是实际开发中怎么去使用,这就需要有一定的经验累积才能做得更好。
这里直接给代码自己去理解一下,然后自己完成相应的题目。
== 项目案例一==
1.根据下表,开发用户类(User类):
2.开发用户类的Dao开发(UserDao类)
完成用户的增删改查等功能。
3.开发UserService类,调用Dao类,完成用户的操作功能。
import java.util.Date;
/**
*
* @Description 用户类
* @author G.TQ
* @version
* @date Dec 23, 20202:40:04 PM
*
*/
public class User {
private String userId;
private String userName;
private String password;
private String contactTel;
private String email;
private Date createTime;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getContactTel() {
return contactTel;
}
public void setContactTel(String contactTel) {
this.contactTel = contactTel;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date date) {
this.createTime = date;
}
}
/**
*
* @Description 用户Dao类:Dao(数据访问对象)data access object,也就是操作数据库
* @author G.TQ
* @version
* @date Dec 23, 20202:38:32 PM
*
*/
public class UserDao {
//完成用户的增删改查功能:(CRUD操作)create read update delete
//添加用户
public void saveUser(User user) {
System.out.println("保存用户信息成功:"+user.getUserName());
}
//删除用户信息
public void delUserByUserId(String userId) {
System.out.println("删除用户成功:"+userId);
}
//修改用户
public void modifyUser(User user) {
System.out.println("修改信息成功:"+user.getUserName());
}
//查询用户
public User loadUserByUserId(String userId) {
User user = new User();
user.setUserId(userId);
return user;
}
}
public class UserSerivce {
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
//增加用户
public void saveUser(User user) {
userDao.saveUser(user);
}
//删除用户
public void delUser(String userId) {
userDao.delUserByUserId(userId);
}
//修改用户
public void modifyUser(User user) {
userDao.modifyUser(user);
}
//查询用户
public User findUserById(String userId) {
return userDao.loadUserByUserId(userId);
}
}
import java.util.Date;
public class UserTest {
public static void main(String[] args) {
// 用户的CRUD操作
UserSerivce userSerivce = new UserSerivce();
//匿名对象
userSerivce.setUserDao(new UserDao());
User user = new User();
user.setUserId("u1001");
user.setUserName("系统管理员");
user.setPassword("123456");
user.setContactTel("10086");
user.setEmail("[email protected]");
user.setCreateTime(new Date());
userSerivce.saveUser(user);
userSerivce.delUser("u1002");
userSerivce.modifyUser(user);
User user2 = userSerivce.findUserById("u1005");
System.out.println("user1 id="+user2.getUserId());
}
}
完成:项目案例二
根据下面的表,开发会计核算期类的开发(FiscalYearPeriod类):