JAVASE--05

news/2024/11/15 1:52:43/


异常


语法定义:

try {可能出现异常的代码片段
}catch(XXXException e){捕获try中出现的XXXException后的处理操作代码
}System.out.println("程序开始了");try {String string = "";System.out.println(string.length());System.out.println(string.charAt(0));/** 在try中出错语句以下的代码都不会被执行*/System.out.println("dfd");} catch (NullPointerException e) {System.out.println("出现了空指针");} catch (StringIndexOutOfBoundsException e) {System.out.println("字符串下标索引越界");/** 应当有一个好习惯,在最后一个catch处捕获exception,防止未捕获的异常导致程序中断*/} catch (Exception e){System.out.println("未知异常发生");}System.out.println("程序结束了");



finally块


finally块时定义在异常处理机制的最后一块.它可以直接跟在try之后或者最后一个catch之后.
finally可以保证只要程序执行到了try块当中,那么无论try块中的语句是否会抛出异常,finally都确保其内哦那个一定被执行.
* 通常会释放资源等操作放在finally中,如流的关闭操作.

try {String string = "";System.out.println(string.length());return ;
} catch (Exception e) {System.out.println("程序出错了");
}finally {System.out.println("finally块执行了");
}
标准流关闭
try {fos = new FileOutputStream("./demo./sf.dat");fos.write(1);
} catch (Exception e) {e.printStackTrace();
} finally {try {if(fos != null)fos.close();} catch (IOException e) {e.printStackTrace();}
}


* JDK7后推出了一个新特性
* java 中实现了AotuClose接口的类,都可以被改特性自动关闭
try (FileOutputStream fos = new FileOutputStream("./demo/fos.dat");) {
    fos.write(1);
} catch (Exception e) {
    e.printStackTrace();
}


finally常见面试题


请说明:final,finally,finalize
finalize是Object定义的方法,该方法是被GC执行的额方法,当一个对象即将被GC释放前,GC会调用该方法.
调用该方法完意味着该对象即将被释放.
final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。内部类要访问局部变量,局部变量必须定义成final类型。
finally是异常处理语句结构的一部分,表示总是执行。
/*
 *System.out.println(test("0") + "," + test(null) + "," + test(""));//3,3,3
 */ 
public static int test(String str) {
    try {
        return str.charAt(0) - '0';
    } catch (NullPointerException e) {
        return 1;
    } catch (Exception e) {
        return 2;
    } finally {
        return 3;//返回值覆盖
    }
}
throw (new ...)& throws
Person:
/*
* 当一个方法使用throws声明一个异常的抛出时,那么调用这在调用该方法时就必须处理这个异常
*/
public void setAge(int age) throws Exception {
    if(age > 100 || age < 0) 
        /*
         * 当一个方法当中使用throw抛出什么异常,就要在方法上使用throws声明该异常的抛出,
         * 只有RuntimeException无需这样,其他类型异常则是必须的,否则编译不通过
         */
        throw new Exception("年龄不合法");
    this.age = age;
}
ThrowDemo:

/** 通常一个方法抛出异常有两种情况throw* 1:方法当中遇到了满足语法要求,但是不满足业务逻辑需要* 2;方法中确实出现了异常,但是该异常不应该由该方法处理,会抛出给调用者解决*/
try {/** 当调用一个含有throws声明异常抛出的方法时,编译器提示必须处理该异常,处理的手段有* 两种:* 1:使用try...catch捕获并处理该异常* 2:继续在当前方法上使用throws声明并抛出异常*/p.setAge(1000);
} catch (Exception e) {System.out.println("出错了");
}


子类重写父类含有throws声明异常抛出的方式和对throws的重写规则
重写的规则====>两同,两小,一大

public class ThrowsDemo {
public void dosome() throws IOException ,AWTException{}
}class Son extends ThrowsDemo {//  public void dosome() throws IOException, AWTException {} 抛出相同的异常√//  public void dosome(){}  不抛出异常√//  public void dosome() throws IOException{}  抛出父类的部分异常√//  public void dosome() throws FileNotFoundException {}   抛出父类的异常的子类异常√//  public void dosome() throws SQLException{}   不可以抛出额外异常×//  public void dosome() throws Exception{}    不可以抛出比父类异常还大的异常×}


e.printStackTrace();用于输出错误信息,有助于找到并解决错误


自定义异常


通常用来说明我们程序中的某个业务逻辑错误 因为java提供的 异常基本上没有描述实际项目中的业务错误, 这时我们可以自定义一个异常.

public class IllegalAgeException extends Exception {//:定义异常名称,见名知意
private static final long serialVersionUID = 1L;//添加版本号
/*添加构造方法*/
public IllegalAgeException() {super();
}public IllegalAgeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);
}public IllegalAgeException(String message, Throwable cause) {super(message, cause);
}public IllegalAgeException(String message) {super(message);
}public IllegalAgeException(Throwable cause) {super(cause);
}



网络编程


套接字Socket:


封装了TCP协议的通讯细节,让我们可以简单的使用它完成TCP通讯.
Socket链接后提供了两条流,通过两条流的读写操作完成与远端计算机的数据交换.
ServerSocket
 运行在服务端的ServerSocket主要有两个作用:
 1:向系统申请服务端口,客户端就是通过这个端口与服务端建立连接的.
 2:监听服务端口,一旦客户端与服务端建立连接,就会自动创建一个Socket,并通过该
 Socket与建立连接的客户端进行交互
客户端:

public class Client {/** Socket套接字 * 封装了TCP协议的通讯细节,让我们可以简单的使用它完成TCP通讯 Socket链接* 后提供了两条流,通过两条流的读写操作完成与远端计算机的数据交换.*/private Socket socket;/** 用来初始化客户端*/public Client() {try {//客户端连服务端,谁发起连接谁是客户端/** 实例化Socket时需要传入两个参数:* 1:服务端的IP地址* 2:服务端的端口号* 通过IP地址可以找到服务端所在的计算机,通过端口可以找到运行在服务端* 的应用程序.* 注意:实例化Socket的过程就时连接的过程,若连接失败就会抛出异常*/System.out.println("正在连接服务端...");socket = new Socket("localhost", 8088);//new的过程就是发起连接的过程System.out.println("与服务端连接成功!");} catch (IOException e) {e.printStackTrace();}}/** 客户端开始工作的方法*/public void start() {try {/** Socket提供的方法* OutputStream getOutputStream()* 该方法读取一个字节输出流,通过该流写出的数据会发送给远端计算机*/OutputStream out = socket.getOutputStream();OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8");BufferedWriter bw = new BufferedWriter(osw);PrintWriter pw = new PrintWriter(bw,true);//聊天需要及时性pw.println("你好,服务端!");//必须使用println()方法===>br.readLine();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {Client client = new Client();client.start();}
}


服务端:

package socket;import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;/*** 聊天室服务端** @author Mr.Huang* @date 2018年8月1日*/
public class Server {/** ServerSocket* 运行在服务端的ServerSocket主要有两个作用:* 1:向系统申请服务端口,客户端就是通过这个端口与服务端建立连接的.* 2:监听服务端口,一旦客户端与服务端建立连接,就会自动创建一个Socket,并通过该* Socket与建立连接的客户端进行交互*/private ServerSocket serverSocket;/** 用来初始化服务端*/public Server(){try {/** 实例化ServerSocket的同时深情服务端口*/System.out.println("正在启动服务端...");serverSocket = new ServerSocket(8088);System.out.println("服务端启动完毕!");} catch (IOException e) {e.printStackTrace();}}/** 服务端开始工作的方法*/public void start(){try {System.out.println("等待客户端连接...");Socket socket = serverSocket.accept();//阻塞方法System.out.println("与客户端连接成功!");/** 接受客户端的输入* 通过Socket提供的方法:* InputStream getInputStream()* 读取该输入流的数据就是读取远端计算机发送过来的数据*/InputStream is = socket.getInputStream();InputStreamReader isr = new InputStreamReader(is, "UTF-8");BufferedReader br = new BufferedReader(isr);String message = br.readLine();System.out.println("客户端说" + message);} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {Server server = new Server();server.start();}
}

 


http://www.ppmy.cn/news/812815.html

相关文章

JAVA SE (5)

–> JAVASE(4) 可变参数 JDK1.5开始&#xff0c;java支持传递同类型的可变参数给一个方法。 可变参数的声明&#xff1a;int... number,一个方法只能指定一个可变参数&#xff0c;且必须放在最后个参数。普通的参数在可变参数之前声明。 pulic class Test{public static …

java-SE-5

类和对象 类&#xff0c;对象&#xff0c;也可以成为类型和实例&#xff1b;简单的理解来说就是类是将问题建模&#xff0c;归成一类问题&#xff0c;而对象则是将问题映射到具体的问题上&#xff1b; java中有一句话&#xff0c;万物皆对象&#xff0c;就是说一切都是对象构…

JAVASE(5)

final关键字 final关键字修饰类体现在该类不能被继承 final关键字修饰成员方法体现在该方法不能被重写 final修饰到的成员变量必须被初始化且不能改变值 &#xff08;初始化三种方式&#xff1a;显式初始化、构造块中初始化、构造方法体中初始化&#xff09; 常量 通常使用pu…

javaSE 3.5

package hello;public class test {public static void main(String[] args) {//最有效率的方式算出2乘以8等于几&#xff1f;System.out.println(2<<3);// 对两个整数变量的值进行互换 (不需要第三方变量)int a 3,b 5;System.out.println("a"a",b&quo…

java SE

注释 1&#xff09;author 作者 2&#xff09;version 版本号 3&#xff09;see 包 4&#xff09;since jdk版本 String 1&#xff09;String 字面量 1.1&#xff09;jvm在堆中开辟了一段空间来缓存所有使用字面量创建的字符串对象&#xff0c;只要发现使用已经创建过得字符串…

javase 5

因为第一个if满足所以进入执行第二个if不满足条件&#xff0c;而红色的system是和第一个if同一等级的所以执行红色system 输出c&#xff0c;因为false赋给了b所以前三个都是false不满足只有条件伟ture时才执行 Math.random用于生成随机数范围为[0.0,1.0),想要更大的数可以乘以…

JavaSE-5

String是最原始的&#xff0c;不可变字符序列&#xff0c;效率低&#xff0c;线程不安全 StringBuilder是可变字符序列&#xff0c;效率高&#xff0c;线程不安全 StringBuffer是可变字符序列&#xff0c;效率低&#xff0c;线程安全 电脑自动输出时间格式&#xff1a;yyyy-…

Java javase15

一、网络编程 &#xff08;一&#xff09;软件结构 C/S结构&#xff1a;全称为Client/Server结构&#xff0c;是指客户端和服务器结构。常见的有QQ、迅雷等。B/S结构&#xff1a;全称为Browser/Server结构&#xff0c;是指浏览器和服务器结构。常见的有谷歌、火狐等等。网络编…