首页 > 其他分享 >面向对象——封装

面向对象——封装

时间:2023-01-12 09:47:46浏览次数:43  
标签:封装 NIO s1 面向对象 IO 缓冲区 age public

封装

改露的露,该藏的藏

  • 我们程序设计要追求"高内聚,低耦合"。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。

封装(数据的隐藏)

  • 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。

记住这句话就够了:属性私有,get/set。

代码示例:

//学生类  private:私有
public class Student {

   //属性私有
   private String name; //名字
   private int id; //学号
   private char sex; //性别
   private int age; //年龄

   //提供一些可以操作这个属性的方法!
   //提供一些public 的 get、set方法

   //alt + insert --> Getter and Setter
   //get:获得这个数据
   public String getName() {
       return name;
  }

   //set:给这个数据设置值
   public void setName(String name) {
       this.name = name;
  }

   public int getId() {
       return id;
  }

   public void setId(int id) {
       this.id = id;
  }

   public char getSex() {
       return sex;
  }

   public void setSex(char sex) {
       this.sex = sex;
  }

   public int getAge() {
       return age;
  }

   public void setAge(int age) {
       //判断该年龄是否合法
       if (age > 120 || age < 0) {
           this.age = 3;
      }else {
           this.age = age;
      }
  }
}

 

/**
* 封装的意义:
* 1.提高程序的安全性,保护数据
* 2.隐藏代码的实现细节
* 3.统一接口
* 4.系统可维护增加了
**/
public class Application {
   public static void main(String[] args) {
       Student s1 = new Student();

       s1.setName("崔九八");

       System.out.println(s1.getName());

       s1.setAge(150);//不合法
       System.out.println(s1.getAge());

       System.out.println("====================");

       s1.setAge(-1);//不合法
       System.out.println(s1.getAge());

       System.out.println("====================");

       s1.setAge(18);
       System.out.println(s1.getAge());
  }
}

//输出结果
崔九八
3
====================
3
====================
18

Process finished with exit code 0

每日Java面试题

一、异步I/O(asynchronous IO)

异步IO告知内核启动某个操作,并让内核在整个操作(包括将内核数据复制到我们自己的缓冲区)完成后通知我们,调用aio_read(Posix异步I/O函数以aio或lio开头)函数,给内核传递描述字、缓冲区指针、缓冲区大小(与read相同的3个参数)、文件偏移以及通知的方式,然后系统立即返回。我们的进程不阻塞于等待I/O操作的完成。当内核将数据拷贝到缓冲区后,再通知应用程序。

用户进程发起read操作之后,立刻就可以开始去做其他的事。而另一方面,从kernel的角度,当它受到一个asynchronous read之后,首先它会立刻返回,所以不会对用户进程产生任何block。然后,kernel会等待数据准备完成,然后将数据拷贝到用户内存,当这一切都完成之后,kernel会给用户进程发送一个signal,告诉它read操作完成了。

 

 

二、NIO与IO的区别?

NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到是块,所有NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套是网络编程NIO。

IONIO
面向流 面向缓冲
阻塞IO 非阻塞IO
选择器

三、NIO和IO使用场景

NIO是为弥补传统IO的不足而诞生的,但是尺有所长寸有所短,NIO也有缺点,因为NIO是面向缓冲区的操作,每一次的数据处理都是对缓冲区进行的,那么就会有一个问题,在数据处理之前必须要判断缓冲区的数据是否完整或者已经读取完毕,如果没有,假设数据只读取了一部分,那么对不完整的数据处理没有任何意义。所以每次数据处理之前都要检测缓冲区数据。

那么NIO和IO各适合的场景是什么呢?

如果需要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数据,例如聊天服务器,这时候用NIO处理数据可能是个很好的选择。

而如果只有少量的连接,而这些连接每次要发送大量的数据,这时候传统的IO更合适。使用哪种处理数据,需要在数据的响应等待时间和检查缓冲区数据的时间上作比较来权衡选择。

标签:封装,NIO,s1,面向对象,IO,缓冲区,age,public
From: https://www.cnblogs.com/cuijiuba/p/17045536.html

相关文章