![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
某兔oo
这个作者很懒,什么都没留下…
展开
-
Java的File类表示什么?有什么作用?
File类:代表文件和目录。作用:原创 2021-11-15 19:52:21 · 211 阅读 · 0 评论 -
什么是对象的序列化和反序列化?Java对此提供了哪些支持?
序列化:将实现了Seriallizable接口的对象转换成一个字节序列,并能够在以后将这个字节序列完全恢复为原来的对象,后者又称反序列化。Java提供了ObjectInputStream类和ObjectOutputStream类完成对象的序列化和反序列化。序列化步骤:1)创建一个对象输出流:可以包装一个其他类型的输出流。2)通过对象输出流的writeObject()写对象。注意使用类型转化,转换为相应的类的对象。反序列化步骤:1)创建一个对象输入流:可以包装一个其他类型的输出流。原创 2021-11-15 19:46:53 · 57 阅读 · 0 评论 -
Java中的过滤流(流的装配)有什么作用?请举例说明常用的过滤流。
1、BufferedReader:用于缓存字符流,可以一行一行的读import java.io.*;public class inDataSortMaxMinIn { public static void main(String args[]) { try{ BufferedReader keyin = new BufferedReader(new InputStreamReader(Sy原创 2021-11-15 19:35:50 · 132 阅读 · 0 评论 -
字节流与字符流的转化是怎样的?Java对此提供了哪些支持?
字节流与字符流的转化Java提供了InputStreamReader类和OutputStreamWriter类为字节流和字符流之间实现相互转换。InputSreamReader用于将一个字节流中的字节解码成字符:InputStreamReader(InputStream in):用默认字符集创建一个InputStreamReader对象InputStreamReader(InputStream in,String CharsetName):接收已指定字符集名的字符串,并用该字符创建对象。原创 2021-11-15 19:30:37 · 141 阅读 · 0 评论 -
字节流InputStream和OutputStream的子类分别有哪些?请举例说明其使用场景。与其对应的字符流分别有哪些?
InputStream的子类FileInputStream 文件流PipedInputStream 管道输入流:读取管道内容。多和PipedOutputStream一起用于多线程通信。ObjectInputStream 用来恢复被序列化的对象ByteArrayInputStream 包含一个内存缓冲区,字节从中取出。SequenceInputStream 多种输入流的逻辑串联,从第一个输入流读取,直到最后一个输入流。FilterInputStream 过滤流,在读写数据的同时还可以对数据..原创 2021-11-15 19:25:57 · 165 阅读 · 0 评论 -
Java中流的分类有哪些?
不同的评判标准下,流有不同的分类。流动方向输入流:如System.in是一个InputStream类型输入流输出流:如System.out 是一个PrintStream类型输出流读取类型字节流:如System.in是一个InputStream类型字节流字符流:如new InputStreamReader(System.in)是一个字符流对象发生的源头节点流:直接操作目标设备对应的流,如文件流,标准输入输出流过滤流:继承带有关键字Filter的流,用于包装操作节点流,方便读原创 2021-11-15 19:16:50 · 1742 阅读 · 0 评论 -
仿照例15.5,编写基于UDP数据报的多客户/服务器通信程序。
客户端:import java.io.*;import java.net.*;public class QuoteClient {public static void main(String[] args) throws IOException{ if(args.length!=1){ //如果启动的时候没有给出Server的名字,那么打印出错信息并退出 System.out.println("Usage:java QuoteClient <hostname>原创 2021-11-15 18:11:12 · 768 阅读 · 0 评论 -
仿照例15.4,编写基于TCP Socket的多客户/服务器通信程序。
服务器主线程import java.io.*;import java.net.*;public class MultiTalkServer{ static int clientnum=0; //静态成员变量,记录当前客户的个数 public static void main(String args[]) throws IOException { ServerSocket serverSocket=null; boolean listening=true;原创 2021-11-15 18:08:39 · 219 阅读 · 0 评论 -
基于TCP Socket的C/S通信与基于UDP数据报的C/S通信有哪些区别?Java分别提供了哪些支持?
TCPSocket通讯:网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个 双向链路的一端称为一个Socket。Socket通常用来实现客户方和服 务方的连接。Socket是TCP/IP协议的一个十分流行的编程接口,一 个Socket由一个IP地址和一个端口号唯一确定。UDP :DatagramSocket与DatagramPacketDatagramSocket:用于发送或接收数据报,是数据报投递服务的一个发送或接收点。DatagramPacket:用来表示一个数据报。.原创 2021-11-15 18:05:07 · 656 阅读 · 0 评论 -
Java提供了哪些同步机制来实现互斥?
Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问,第一个是 JVM 实现的 synchronized,而另一个是 JDK 实现的 ReentrantLock。synchronizedsynchronized可以作为函数的修饰符,也可作为函数内的语句。它可以作用于instance变量,对象引用(object reference),static函数和类名称字面常量(class literals)。一、synchronized作函数修饰符二、synchronized同步程序块三、s原创 2021-11-14 19:23:31 · 245 阅读 · 0 评论 -
volatile关键字的作用
1、保证该变量对所有线程的可见性可见性:当一个线程修改了这个变量的值,volatile 保证了新值能立即同步到主内存,同时其他线程每次使用前都会从主内存读取,从而新值对于其他线程来说是可以立即得知的。但普通变量做不到这点,普通变量的值在线程间传递均需要通过主内存来完成。volatile拥有特殊的访问规则:(1)使用前必须先从主内存刷新最新的值;(2)修改后必须立刻同步回主内存中。2、禁止指令重排序优化为了尽可能的减小内存操作速度远慢于 CPU 运行速度所带来的 CPU 空置的影响,虚原创 2021-11-14 18:57:12 · 315 阅读 · 0 评论 -
FutureTask类有什么作用?它实现了哪些接口?Callable接口和Runnable接口有什么不同?
一个可取消的异步计算。FutureTask提供了对Future的基本实现,可以调用方法去开始和取消一个计算,可以查询计算是否完成并且获取计算结果。只有当计算完成时才能获取到计算结果,一旦计算完成,计算将不能被重启或者被取消,除非调用runAndReset方法。除了实现了Future接口以外,FutureTask还实现了Runnable接口,因此FutureTask交由Executor执行,也可以直接用线程调用执行(futureTask.run())。Callable接口和Runnable接口有什么不.原创 2021-11-14 18:48:20 · 534 阅读 · 0 评论 -
finally子句的作用
是这个组合语句的统一出口,一般用来进行一些善后清理操作,例如清理资源、释放连接、关闭文件、管道流等操作。它是可选的部分,但一旦选定,必定执行。原创 2021-10-27 19:33:17 · 215 阅读 · 0 评论 -
异常中的throws声明与throw语句的区别是什么?请举例说明。
throws 关键字用于声明异常,其位置是方法头部的最后,方法体开始的 { 之前。throw 关键字则用来抛出异常,其位置是方法体中。throw和throws关键字之间的联系:如果在某方法中使用throw抛出了某种unchecked exception而该throw语句并未使用 try-catch结构进行异常处理,则throw语句所在的方法必须使用throws关键字进行该异常类的声明,否则产生编译错误。...原创 2021-10-27 19:31:15 · 111 阅读 · 0 评论 -
简述异常处理的两种方式,并举例说明区别。
声明抛出处理1、显式声明抛出2、隐式异常声明程序捕获处理原创 2021-10-27 19:26:51 · 258 阅读 · 0 评论 -
简述StackOverflowError和OutOfMemoryError两类错误的发生情形和原因。
StackOverflow原因:线程调用生成的栈桢深度超过了虚拟机允许的深度情形:1、递归可能造成StackOverflowError2、不断创建线程可能造成StackOverflowErrorOutOfMemoryError原因:内存不够,发生了内存溢出情形:1、栈的深度(大小类似于弹夹深度)可以自动扩展,扩展时无法申请到足够的内存2、如果在堆中没有内存完成实例分配,并且堆也无法再扩展时3、当方法区无法满足内存分配需求时4、当常量池(方法区的一部分)无法再申请到原创 2021-10-27 19:20:08 · 442 阅读 · 0 评论 -
Throwable的子类。简述Java Error类与Exception类的区别。
Throwable的子类Error: 致命异常。标识系统发生了不可控的错误。程序无法处理,只能人工介入。例如, 虚拟机产生的错误StackOverflowError、OutOfMemoryError。Exception: 非致命异常。程序可处理。分为受编译器检测的checked异常(受检异常)和不受编译器检测的unchecked异常(非受检异常)。区别:Error:程序无法处理的系统错误,编译器不做检查;(程序无法处理的错误)属于JVM需要负担的责任。Exception:程序可以处理原创 2021-10-23 11:28:23 · 164 阅读 · 0 评论 -
举例说明运算符instanceof的使用场景
instanceof:是Java中的二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。public interface A {} public class B implements A{ } public class C extends B{}public class InstanceofTest3 { public static void main(String[] args) { A a = n原创 2021-10-18 20:11:42 · 207 阅读 · 0 评论 -
使用接口改写例6.8中的程序
//6.8public abstract static class Shape { protected double x,y,z; //子类可见 //抽象方法 abstract public double getArea(); abstract public double getPerimeter(); //抽象类可以有构造方法,初始化从父类继承的实例变量 public Shape(double x,dou.原创 2021-10-18 20:02:06 · 92 阅读 · 0 评论 -
谈谈抽象类与接口的异同以及两者的使用场景。
原创 2021-10-18 19:30:33 · 73 阅读 · 0 评论 -
Java中的运行时多态的含义是什么?有什么作用?请举例说明
运行时的多态:方法覆盖实现(子类覆盖父类方法)父类的引用指向子类对象,调用的方法子类的方法//父类class A { void fun() { System.out.println(“I am A”); } } //A的子类Bclass B extends A { void fun() { System.out.println(“I am B”); } }原创 2021-10-18 19:25:32 · 110 阅读 · 0 评论 -
谈谈组合与继承的区别以及两者的使用场景
1.组合(has-a)关系可以显式地获得被包含类(继承中称为父类)的对象,而继承(is-a)则是隐式地获得父类的对象,被包含类和父类对应,而组合外部类和子类对应。2.组合关系在运行期决定,而继承关系在编译期就已经决定了。3.组合是在组合类和被包含类之间的一种松耦合关系,而继承则是父类和子类之间的一种紧耦合关系。4.当选择使用组合关系时,在组合类中包含了外部类的对象,组合类可以调用外部类必须的方法,而使用继承关系时,父类的所有方法和变量都被子类无条件继承,子类不能选择。5.最重要的一点,使用继承关系时原创 2021-10-18 19:20:42 · 2023 阅读 · 0 评论 -
如何实现两个对象之间互发消息,请举例说明。
class Src{ int s; public Src(int _s){//构造函数,保证s的非负 if(_s>=0) s = _s; else s=0; } public void change(Dis d){//设计一个特殊的方法来改变s的值,每次改变都会给Dis对象发通知 for(int a=1;a<5;a++) { d.get(); ..转载 2021-10-18 19:11:25 · 243 阅读 · 0 评论 -
组合、重载、覆写
今天学会了插入代码段~开心~组合使用多个已有的对象组合为一个功能更加复杂强大的新对象。重载方法名称相同,参数类型或个数不同编译器视角: 方法签名=方法名称+参数类型+参数个数 组成唯一键class StuManage { public int getScore(){ return 3; } public int getScore(int i){ return i; } /*public long原创 2021-10-10 17:50:20 · 103 阅读 · 0 评论 -
Java的访问控制修饰符
1.默认访问修饰符:对同一个包内的类是可见的。接口里的变量都隐式声明为public static final,而接口里的方法默认情况下访问权限为public。2.private:被声明为private的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为private。声明为私有访问类型的变量只能通过类中公共的 getter 方法被外部类访问。3.protected:对于类定义而言,可以被同包中的类和所有子类访问(子类和父类可以不在同一个包中),但对于对象而言,只能被同一个包的类...原创 2021-10-10 17:23:52 · 125 阅读 · 0 评论 -
Java数组元素类型为基本类型和引用类型时,有什么不同?
将数组整体看成一个对象,通过数组引用进行相应的操作: float[] fl, f2; //数组引用声明 fl = new float[10]; //数组引用与新创建的数组对象相关联 f2 = f1; //引用赋值,f2和f1引用同一个数组对象 Java中数组的下标从0开始,如果数组越界,产生的异常为:IndexOutOfBoundsException (它继承RuntimeException) ...原创 2021-10-07 13:19:26 · 110 阅读 · 0 评论 -
Java中float[10] arr语句
错误,不可以在方括号内指定数组大小一维数组的声明格式类型标识符 数组名[];(合法但不推荐)类型标识符[] 数组名;例如: int [ ] arr; String [ ] example; myClass [ ] mc ; ...原创 2021-10-07 13:15:05 · 150 阅读 · 0 评论 -
Java中final修饰符的作用
final修饰属性,则属性为常量; 例:final int NUM = 20; NUM = 30; // 编译错误如果修饰方法,则该方法在子类当中不能被覆盖(见多态一节),可防止任何继承类修改此方法,保证了程序的安全性和正确性。例:class Parent { public final void method1(){}//这个方法不能被子类覆盖 }class Child extends Parent { public final voi...原创 2021-10-07 13:11:40 · 121 阅读 · 0 评论 -
类的static字段与非static字段的区别及使用static修饰符的场景
用static修饰符修饰的数据成员是不属于任何一个类的具体对象,而是属于类的静态数据成员。它被保存在类的内存区的公共存储单元中,而不是保存在某个对象的内存区中。因此,一个类的任何对象访问它时,存取到的都是相同的数值。访问方式为通过类名加点操作符来访问,也可通过对象引用来访问。 《Java开发手册》强制使用类名(而不是该类的对象引用)访问静态方法和静态变量。输出结果:5 2静态数据成员仅在类加载时进行初始化,且只执行一次初始化static修饰的...原创 2021-10-07 13:07:34 · 267 阅读 · 0 评论 -
对象初始化顺序
创建对象时的初始化顺序:系统会对数据成员进行默认初始化执行数据成员定义处的初始化语句调用构造方法为数据成员指定初值输出结果: 0 8原创 2021-10-07 12:59:11 · 68 阅读 · 0 评论 -
对象与对象引用的区别及对象作为参数传递的特点
1. 创建对象: new FighterPlane(); // 对象分配在堆heap上2. 声明一个对象引用:FighterPlane fp; // fp作为局部变量分配在栈stack上 fp也称为引用变量(Reference Variable) 3. 初始化对象引用: fp = new FighterPlane(); // fp指向实际对象实质是将新创建的FighterPlane对象的首地址赋给对象引用...原创 2021-10-07 12:54:26 · 341 阅读 · 0 评论 -
Java语言跳出多重循环的语句
Java语言提供了4种转移语句:break,continue,return和throw。break语句可以独立使用,而continue语句只能用在循环结构的循环体中。break:break语句通常有下述不带标号和带标号的两种形式:break;(跳出本层循环)break lab; (跳出多重循环的外层循环)其中:break是关键字;lab是用户定义的标号。break lab语句用在循环语句中,必须在外循环入口语句的前方写上lab标号,可以使程序流程退出标号所指明的外循环。 ..原创 2021-09-21 20:14:25 · 468 阅读 · 0 评论 -
逻辑运算符&和&&的区别及逻辑运算符&与位运算符&的区别
逻辑运算符&和&&的区别:&和&&得到的boolean值结果一样,都是并且的意思,但&既是逻辑运算符,也是位运算符;&&只是逻辑运算符。&不具有短路效果,即左边false,右边还会执行;&&具有短路效果,左边为false,右边则不执行。逻辑运算符&与位运算符&的区别:逻辑运算符只能针对boolean类型进行逻辑运算 ,位运算符可以对数值进行逻辑运算。逻辑运算符存在短路的现象,即前边原创 2021-09-21 20:04:19 · 999 阅读 · 0 评论 -
int与Integer的区别及相互转化
int 属于普通数据类型,Integer是 int 所对应的包装类。int转Integer:int a = 1204;Integer A = new Integer(a);或Integer A = Integer.valueOf(a);Integer转int:Integer A = new Integer(1204);int a = A.intValue();原创 2021-09-21 19:59:34 · 254 阅读 · 0 评论 -
自动装箱和自动拆箱
自动装箱:当我们把一个基本类型的值,赋值给引用变量的时候,系统可以 自动将它“包装”为相应的包装类的实例程序需要对象时, 如果给的只是一个基本类型的值, 系统会将它自动装箱为包装类的实例,达到的效果: 有了自动装箱之后, 基本类型的值可以当成对象用。自动拆箱:当我们需要一个基本类型的值时, 但实际上传入的包装类的对象。 系 统会自动把对象“剥”开,得到它的值。 达到的效果: 有了自动拆箱之后, 包装类的对象可当成基本类型的值用。简单来说,装箱就是把值类型转变为引用类型,如:Integer i = .原创 2021-09-21 19:48:16 · 162 阅读 · 0 评论 -
JAVA的基本类型的包装类
基本类型不是类,但Java提供了与基本类型对应的包装类。通过下列网址,可以获得包装类的内容:Java Platform SE 8Double和Float没有缓存,其他类型都有高频缓存区间。其高频缓存区间的缓存范围是:Boolean:使用静态final,就会返回静态值Byte:-128~127Short:-128~127Character:0~127Long:-128~127Integer:-128~127public class Demo1 { public s...原创 2021-09-21 19:25:21 · 169 阅读 · 0 评论 -
JAVA的整型溢出问题
对于整型变量的类型来说,每种类型都是有范围的,一旦超过了数的范围,就会发生整型溢出。下面一段代码,就会发生整型溢出的问题。public static void main(String[] args) { int m = Integer.MAX_VALUE/2+1; //1073741824 int n = Integer.MAX_VALUE/2+1; int overflow = m + n; ...原创 2021-09-21 13:42:08 · 673 阅读 · 0 评论 -
JAVA的数据类型
Java包括两大数据类型:基本类型和引用类型。基本类型或原生类型(primitive type)包括:整数类型:byte(8位), short(16位), int (32位) , long(64位) (值为有符号二进制补码整数) 数据类型 所占位数 数的范围 byte 8 -27~27-1 short 16 ...原创 2021-09-20 17:26:53 · 49 阅读 · 0 评论 -
JDK,JRE,JVM
JDK:全称Java Development Kit,是JAVA开发工具包JRE:全称Java Runtime Environment,是JAVA程序运行环境JVM:全称Java Virtual Machine,是虚拟机JRE包括运行类库和JVM,JDK包括JRE和编译器等开发工具原创 2021-09-20 17:16:27 · 66 阅读 · 0 评论 -
JAVA语言跨平台实现的原理
Java语言如何跨平台运行呢?原理其实是Write once, run anywhere。字节码就像是机器指令,而虚拟机(解释器)像计算机 (CPU),解释器解释字节码指令执行就是CPU取机器指令执行。Java引入平台独立的字节码,又引入Java Virtual Machine(中间层),在不同的操作系统下即可进行运行。...原创 2021-09-20 17:09:47 · 82 阅读 · 0 评论