Java教程 第39页

Java 类实例-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 类实例

Java面向对象设计 – Java类实例 以下是创建类的实例的一般语法: new <Class Constructor>; new 运算符后面是对构造函数的调用。 new 运算符通过分配堆上的内存来创建类的实例。以下语句创建Dog类的实例: new Dog(); Dog()是对Dog类的构造函数的调用。 当我们不向类添加构造函数时,Java编译器为我们添加一个。 Java编译器添加的构造函数称为默认构造函数。默认构造函数不接受参数。 类的构造函数的名称与类名称相同。 new运算符为类的每个实例字段分配内存。类静态变量在创建类的实例时不会分配内存。 要访问类的实例的实例变量,我们必须有它的引用。 类的名称在Java中定义了一个新的引用类型。特定引用类型的变量可以存储相同引用类型的实例的引用。 声明一个引用变量,它将存储Dog类的实例的引用。 Dog anInstance; Dog是类名,它也是一个引用类型,并且 anInstance 是该类型的变量。 anInstance是Dog类型的引用变量。anInstance变量可用于存储Dog类的实例的引用。 new运算符为类的新实例分配内存,并返回对该实例的引用。 我们需要将由新运算符返回的引用存储在引用变量中。 anInstance = new Dog(); null引用类型 我们可以为任何引用类型的变量分配一个空值。空值意味着引用变量是指没有对象。 Dog obj = null; // obj is not referring to any object obj = new Dog(); // Now, obj is referring to a valid Dog object 您可以使用一个空文字与比较运算符来检查是否相等和不等。 if (obj == null) { //obj is null } if (obj != null) { //obj is not null } Java不会混合引用类型和原始类型。我们不能给一个原始类型变量赋null。 访问类的字段的点表示法 点符号用于引用实例变量。 点符号语法的一般形式是 <Reference Variable Name>.<Instance Variable Name> obj.name引用obj引用变量引用的实例的名称实例变量。 要为名称实例变量分配值,请使用 obj.name = "Rectangle"; 以下语句将name实例变量的值分配给String变量aName: String aName = obj.name; 要引用类变量,请使用类的名称。 ClassName.ClassVariableName 例如,我们可以使用Dog.count来引用Dog类的计数类变量。 向计数类变量分配新值 Dog.count = 1; 要将count类变量的值读取到变量中 long count = Dog.count; 以下代码显示如何使用类字段 class Dog { static int count =...

Java 管道-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 管道

Java IO教程 – Java管道 管道连接输入流和输出流。 管道 I/O基于生产者 – 消费者模式,其中生产者产生数据并且消费者消费数据。 在管道 I/O中,我们创建两个流代表管道的两端。 PipedOutputStream对象表示一端,PipedInputStream对象表示另一端。我们使用两个对象上的connect()方法连接两端。 我们还可以通过在创建另一个对象时将一个对象传递给构造函数来连接它们。 以下代码显示了创建和连接管道两端的两种方法: 第一种方法创建管道输入和输出流并连接它们。它使用connect方法连接两个流。 PipedInputStream pis = new PipedInputStream(); PipedOutputStream pos = new PipedOutputStream(); pis.connect(pos); /* Connect the two ends */ 第二种方法创建管道输入和输出流并连接它们。它通过将输入管道流传递到输出流构造器来连接两个流。 PipedInputStream pis = new PipedInputStream(); PipedOutputStream pos = new PipedOutputStream(pis); 我们可以在连接管道的两端后生成和使用数据。 我们通过使用PipedOutputStream对象的一个​​write()方法产生数据。无论我们对管道输出流写入什么,自动变得可用于管道输入流对象进行读取。 我们使用PipedInputStream的read()方法从管道读取数据。如果数据在尝试从管道读取时不可用,则管道输入流被阻止。 管道流具有固定容量的缓冲器,以在写入管道和从管道读取之间存储数据。 我们可以设置管道容量,当我们创建它。如果管道的缓冲区已满,则尝试在管道上写入将被阻止。 以下代码创建缓冲区容量为2048字节的管道输入和输出流。 PipedOutputStream pos = new PipedOutputStream(); PipedInputStream pis = new PipedInputStream(pos, 2048); 管道用于将数据从一个线程传输到另一个线程。两个线程之间的同步由阻塞读和写来处理。 例子 以下代码演示了如何使用管道 I/O。 import java.io.PipedInputStream; import java.io.PipedOutputStream; public class Main { public static void main(String[] args) throws Exception { PipedInputStream pis = new PipedInputStream(); PipedOutputStream pos = new PipedOutputStream(); pos.connect(pis); Runnable producer = () -> produceData(pos); Runnable consumer = () -> consumeData(pis); new Thread(producer).start(); new Thread(consumer).start(); } public static void produceData(PipedOutputStream pos) { try { for (int i =...