三分钟“手撕”三大特性中的<封装>

目录

一、什么是封装

二、访问限定符

三、封装扩展之包 

1.包的概念

2.导入包中的类

2.1什么是导入包?

 2.2.显式的指定要导入的类名

3.自定义包

3.1.基本规则:

3.2.操作步骤

3.3.包的访问权限控制举例 

3.4.常见的包


一、什么是封装

面向对象有三大特性:封装、继承、多态。那什么是封装呢?简单来说,就是套个壳子隐藏里面的细节。但是请注意,这三大特性是面向对象的,不能说是Java的三大特性

比如:一个电脑来说,电脑内部是很复杂的,但是它提供了就是开关机、通过键盘输入,显示器,USB插孔等,让用户来和计算机进行交互,完成日常事务。但实际上,电脑真正工作的却是CPU、显卡、内存等一些硬件元件。

二、访问限定符

Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,而访问权限用来控制方法或者变量能否直接在类外使用。Java中提供了四种访问限定符:

比如: public:可以理解为一个人的外貌特征,谁都可以看得到。

default: 对于自己家族中(同一个包中)不是什么秘密,对于其他人来说就是隐私了。

private:只有自己知道,其他人都不知道。

注意:

protected主要是用在继承中,继承部分后续的博客会介绍。

default权限指:什么都不写时的,int a;就是default int a;

访问权限除了可以限定类中成员的可见性,也可以控制类的可见性。

class Computer {
private String cpu; // cpu
private String memory; // 内存
public String screen; // 屏幕
String brand; // 品牌---->default属性

public Computer(String brand, String cpu, String memory, String screen) {
this.brand = brand;
this.cpu = cpu;
this.memory = memory;this.screen = screen;
}

public void Boot(){
System.out.println("开机~~~");
}

public void PowerOff(){
System.out.println("关机~~~");
}

public void SurfInternet(){
System.out.println("上网~~~");
}
}

public class TestComputer {
public static void main(String[] args) {
Computer p = new Computer("HW", "i7", "8G", "13*14");
System.out.println(p.brand); // default属性:只能被本包中类访问
System.out.println(p.screen); // public属性: 可以任何其他类访问
// System.out.println(p.cpu); // private属性:只能在Computer类中访问,不能被其他类访问
}
}

三、封装扩展之包 

1.包的概念

什么是包呢? 为了更好的管理类,把多个类收集在一起成为一组,称为软件包。简单来说,就是文件夹

 包有两个好处:

1.包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:你在A包不想被B包的使用,在A使用封装就行了。

2. 可以使用可以名字相同的类,只要在两个不同的包里。有了包就像多了个目录,这样绝对路径也会多增加一个,这样在计算机中就找不到路径一模一样的类了。

2.导入包中的类

2.1什么是导入包?

导入包就是软件给你提供了一些现成可以使用的类,一起形成了一个包,就叫做导入包。 

Java中有很多可以可以直接使用的类,比如:Data类,我们可以直接写java.util.Data就是使用java.util这个包,使用Data这个类。

public class Test{
    public static void main(String[] args) {
    java.util.Date date = new java.util.Date();
    // 得到一个毫秒级别的时间戳
    System.out.println(date.getTime());
}
}

 但是这种写法比较麻烦一些, 可以使用 import语句导入包。只要你输入一个Date,软件就会提示你选哪一个,选你要选的回车一下,聪明的软件就会在最开头自动给你import你这个类的包。

import java.util.Date;

    public class Test {
    public static void main(String[] args) {
    Date date = new Date();
    // 得到一个毫秒级别的时间戳
    System.out.println(date.getTime());
}
}

 如果需要使用 java.util 中的其他类, 也可以使用 import java.util.*。这个*代表的是全部,也就是说java.util这个包里面的类你都可以使用。

 2.2.显式的指定要导入的类名

比如:对于Date而已,在java.util和java.sql中都存在,如果出现下面的情况,软件就不知道你是要选择哪一个。

import java.util.*;
import java.sql.*;

public class Test {
public static void main(String[] args) {
// util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译出错
Date date = new Date();
System.out.println(date.getTime());
}
}
// 编译出错
Error:(5, 9) java: 对Date的引用不明确
java.sql 中的类 java.sql.Date 和 java.util 中的类 java.util.Date 都匹配

这时候就需要修改成java.util.Date date = new java.util.Date(); 

3.自定义包

3.1.基本规则:

1.在开头,会有个package(包)开头的一条语句,这就是你定义的包。

2.包名会在代码路径中添加个目录,比如:我创建一个www.baidu.com,那么系统会自动生成一个对应的目录加到你本来类的路径上面。

3.如果没有定义包,那么会被放到一个默认的包去,也就是src这个包。

3.2.操作步骤

1.在idea中,在代码的左边的src(右键)-->new(新建)-->package(包)点击它。

 2.在框里面输入www.baidu.com

3.在包中新建类写代码,会发现最上方加了package+包名

4.这时候我们的路径也发生的修改,自动添加了www>baidu>com

3.3.包的访问权限控制举例 
package A;

public class Computer {
private String cpu; // cpu
private String memory; // 内存
public String screen; // 屏幕
String brand; // 品牌

public Computer(String brand, String cpu, String memory, String screen) {
this.brand = brand;
this.cpu = cpu;
this.memory = memory;
this.screen = screen;
}

public void Boot(){
System.out.println("开机~~~");
}

public void PowerOff(){
System.out.println("关机~~~");
}

public void SurfInternet(){
System.out.println("上网~~~");
}
}
///
package B;
import A;
public class TestComputer {
public static void main(String[] args) {
Computer p = new Computer("HW", "i7", "8G", "13*14");
System.out.println(p.screen);
// System.out.println(p.cpu); // 报错:cup是私有的,不允许被其他类访问
// System.out.println(p.brand); // 报错:brand是default,不允许被其他包中的类访问
}
}
// 注意:如果去掉Computer类之前的public修饰符,代码也会编译失败
3.4.常见的包

1. java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。

2. java.lang.reflect:java 反射编程包;

3. java.net:进行网络编程开发包。

4. java.sql:进行数据库开发的支持包。

5. java.util:是java提供的工具程序包。(集合类等) 非常重要

6. java.io:I/O编程开发包。 

  • 45
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
好的,@Mapper注解是Mybatis框架用于标识数据访问层接口的注解,用于告诉Spring容器将该接口类实例化并注入到其他Bean。其使用步骤如下: 1. 在Spring Boot项目引入Mybatis和Mybatis-Spring的依赖 2. 在配置文件配置数据源和Mybatis的相关属性 3. 创建一个数据访问层接口,使用@Mapper注解标识该接口 4. 在该数据访问层接口定义需要操作的数据库方法 5. 在Service或Controller注入该数据访问层接口的实例,并调用其的方法 下面是一个示例: 1. 在pom.xml添加Mybatis和Mybatis-Spring的依赖: ```xml <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> ``` 2. 在application.properties配置数据源和Mybatis的相关属性: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 mybatis.type-aliases-package=com.example.demo.entity mybatis.mapper-locations=classpath:mapper/*.xml ``` 3. 创建一个数据访问层接口UserMapper,使用@Mapper注解标识该接口: ```java @Mapper public interface UserMapper { User selectByPrimaryKey(Integer id); int insert(User record); int updateByPrimaryKey(User record); int deleteByPrimaryKey(Integer id); } ``` 4. 在mapper目录下创建UserMapper.xml,定义需要操作的数据库方法: ```xml <mapper namespace="com.example.demo.mapper.UserMapper"> <resultMap id="BaseResultMap" type="com.example.demo.entity.User"> <id column="id" property="id" jdbcType="INTEGER"/> <result column="username" property="username" jdbcType="VARCHAR"/> <result column="password" property="password" jdbcType="VARCHAR"/> </resultMap> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer"> select * from user where id = #{id,jdbcType=INTEGER} </select> <insert id="insert" parameterType="com.example.demo.entity.User" useGeneratedKeys="true" keyProperty="id"> insert into user (username, password) values (#{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}) </insert> <update id="updateByPrimaryKey" parameterType="com.example.demo.entity.User"> update user set username = #{username,jdbcType=VARCHAR}, password = #{password,jdbcType=VARCHAR} where id = #{id,jdbcType=INTEGER} </update> <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer"> delete from user where id = #{id,jdbcType=INTEGER} </delete> </mapper> ``` 5. 在Service或Controller注入UserMapper的实例,并调用其的方法: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public User selectByPrimaryKey(Integer id) { return userMapper.selectByPrimaryKey(id); } @Override public int insert(User user) { return userMapper.insert(user); } @Override public int updateByPrimaryKey(User user) { return userMapper.updateByPrimaryKey(user); } @Override public int deleteByPrimaryKey(Integer id) { return userMapper.deleteByPrimaryKey(id); } } ``` 这就是使用@Mapper注解的基本步骤,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值