本文共 23813 字,大约阅读时间需要 79 分钟。
package com.java;import java.util.Scanner;public class QuotientWithException { public static int quotient(int number1, int number2) { if (number2 == 0) throw new ArithmeticException("Divisor cannot be zero"); return number1 / number2; } public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Enter two integers: "); int number1 = input.nextInt(); int number2 = input.nextInt(); try { int result = quotient(number1, number2); System.out.println(number1 + "/" + number2 + " is " + result); } catch (ArithmeticException ex) { System.out.println("Exception an integer " + "cannot be divided by zero"); } System.out.println("Execution continues ..."); }}
package com.java;import java.util.InputMismatchException;import java.util.Scanner;public class InputMismatchExceptionDemo { public static void main(String[] args) { Scanner input = new Scanner(System.in); boolean continueInput = true; do { try { System.out.print("Enter an integer: "); int number = input.nextInt(); System.out.println("The number entered is " + number); continueInput = false; }catch (InputMismatchException ex){ System.out.println("Try again. (" + "Incorrect input: an integer is required)"); input.nextLine(); } }while(continueInput); }}
try{ statements;}catch(Exception exVar1){ handler for exception1;}catch(Exception exVar2){ handler for exception2;}catch(Exception exVar3){ handler for exception3;}
package com.java;public class TestException { public static void main(String[] args) { try { System.out.println(sum(new int[]{ 1, 2, 3, 4, 5})); } catch (Exception ex) { ex.printStackTrace(); System.out.println("\n" + ex.getMessage()); System.out.println("\n" + ex.toString()); System.out.println("\nTrace Info Obtained from getStackTrace"); StackTraceElement[] traceElements = ex.getStackTrace(); for (int i = 0; i < traceElements.length; i++) { System.out.print("method " + traceElements[i].getMethodName()); System.out.print("(" + traceElements[i].getClassName() + ":"); System.out.println(traceElements[i].getLineNumber() + ")"); } } } private static int sum(int[] list) { int result = 0; for (int i = 0; i <= list.length; i++) result += list[i]; return result; }}
C:\Users\MuhammadAfif\.jdks\corretto-11.0.10\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.3.2\lib\idea_rt.jar=52317:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.3.2\bin" -Dfile.encoding=UTF-8 -classpath C:\MyFiles\MyJavaCode\Java_Book\out\production\Chapter12 com.java.TestExceptionjava.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5 at com.java.TestException.sum(TestException.java:24) at com.java.TestException.main(TestException.java:6)Index 5 out of bounds for length 5java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5Trace Info Obtained from getStackTracemethod sum(com.java.TestException:24)method main(com.java.TestException:6)Process finished with exit code 0
package com.java;public class CircleWithException { private double radius; private static int numberOfObjects = 0; public CircleWithException() { this(1.0); } public CircleWithException(double newRadius) { setRadius(newRadius); numberOfObjects++; } public double getRadius() { return radius; } public void setRadius(double newRadius) throws IllegalArgumentException { if (newRadius >= 0) radius = newRadius; else throw new IllegalArgumentException("Radius cannot be negative"); } public static int getNumberOfObjects() { return numberOfObjects; } public double findArea() { return radius * radius * Math.PI; }}
package com.java;public class TestCircleWithException { public static void main(String[] args) { try { CircleWithException c1 = new CircleWithException(5); CircleWithException c2 = new CircleWithException(-5); CircleWithException c3 = new CircleWithException(0); } catch (IllegalArgumentException ex) { System.out.println(ex); } System.out.println("Number of objects created: " + CircleWithException.getNumberOfObjects()); }}//输出://java.lang.IllegalArgumentException: Radius cannot be negative//Number of objects created: 1
try{ statements;}catch(TheException ex){ handling ex;}finally{ finalStatemnts;}
try{ statements;}catch(TheException ex){ perform operations before exit; throw ex;}
package com.java;public class ChainedExceptionDemo { public static void main(String[] args) { try{ method1(); //6 }catch (Exception ex){ ex.printStackTrace(); } } public static void method1() throws Exception{ try { method2(); //14 }catch (Exception ex){ throw new Exception("New info from method1",ex); //16 } } public static void method2() throws Exception{ throw new Exception("New info form method2"); //21 } }/*输出内容:java.lang.Exception: New info from method1 at com.java.ChainedExceptionDemo.method1(ChainedExceptionDemo.java:16) at com.java.ChainedExceptionDemo.main(ChainedExceptionDemo.java:6)Caused by: java.lang.Exception: New info form method2 at com.java.ChainedExceptionDemo.method2(ChainedExceptionDemo.java:21) at com.java.ChainedExceptionDemo.method1(ChainedExceptionDemo.java:14) ... 1 more*/
注解:main方法调用method1,method1调用method2,method2在第21行抛出一个异常,该异常于method1中被捕获,捕获后method1又在第16行抛出一个新异常,新异常于main方法捕获。
实例输出ex.printStackTrace()的内容,先输出method1抛出的新异常(16行),以及被调用的行数(6行)。再输出method2抛出的旧异常(21行),以及被调用的行数(14行)
如果第16行被下面一行所替换,将输出什么?
package com.java;public class ChainedExceptionDemo { public static void main(String[] args) { try{ method1(); //6 }catch (Exception ex){ ex.printStackTrace(); } } public static void method1() throws Exception{ try { method2(); //14 }catch (Exception ex){ throw new Exception("New info from method1"); //16 } } public static void method2() throws Exception{ throw new Exception("New info form method2"); //21 } }/*java.lang.Exception: New info from method1 at com.java.ChainedExceptionDemo.method1(ChainedExceptionDemo.java:16) at com.java.ChainedExceptionDemo.main(ChainedExceptionDemo.java:6)*/
package com.java;public class InvalidRadiusException extends Exception { private double radius; public InvalidRadiusException(double radius){ super("Invalid radius" + radius); //调用父类Exception带信息的构造方法,该信息将会被设置在异常对象中,并且可以通过在该对象上调用getMessage()获得 this.radius = radius; } public double getRadius(){ return radius; }}
package com.java;public class TestCircleWithCustomException { public static void main(String[] args) { try { new CircleWithCustomException(5); new CircleWithCustomException(-5); new CircleWithCustomException(0); } catch (InvalidRadiusException ex) { System.out.println(ex); } System.out.println("Number of objects created: " + CircleWithCustomException.getNumberOfObjects()); }}class CircleWithCustomException { private double radius; //圆的半径 private static int numberOfObjects = 0; //对象个数 //半径1创建的圆 public CircleWithCustomException() throws InvalidRadiusException { //调用了带参构造方法,带参构造方法调用了set方法,所以必须声明异常 this(1.0); } //newRadius创建的圆 public CircleWithCustomException(double newRadius) throws InvalidRadiusException { //调用了set方法,所以也必须声明异常 setRadius(newRadius); numberOfObjects++; } //radius访问器 public double getRadius() { return radius; } //radius修改器 public void setRadius(double newRadius) throws InvalidRadiusException { if (newRadius >= 0) radius = newRadius; else throw new InvalidRadiusException(newRadius); //InvalidRadiusException是必检异常所以set方法必须声明异常 } //numberOfObjects访问器 public static int getNumberOfObjects() { return numberOfObjects; } //返回面积 public double findArea() { return radius * radius * Math.PI; }}
package com.java;import java.io.File;import java.util.Date;public class TestFileClass { public static void main(String[] args) { File file = new File("image/us.gif"); System.out.println("Does it exsit? " + file.exists()); System.out.println("The file has " + file.length() + " bytes"); System.out.println("Can it be read? " + file.canRead()); System.out.println("Can it be written? " + file.canWrite()); System.out.println("Is it a directory? " + file.isDirectory()); System.out.println("Is it a file? " + file.isFile()); System.out.println("Is it a absolute? " + file.isAbsolute()); System.out.println("Is it hidden? " + file.isHidden()); System.out.println("Absolute path is " + file.getAbsolutePath()); System.out.println("Last modified on " + new Date(file.lastModified())); }}
package com.java;import java.io.File;import java.io.IOException;import java.io.PrintWriter;public class WriteDate { public static void main(String[] args) throws IOException { File file = new File("scores.txt"); if (file.exists()) { //如果没有这个if语句块,假如文件scores.txt已经存在,则文件中的内容将在不予用户确认的情况下被丢弃 System.out.println("File already exists"); System.exit(1); } PrintWriter output = new PrintWriter(file); output.print("John T Smith "); output.println(90); output.print("Eric K Jones "); output.println(85); output.close(); //必须使用close()方法关闭文件,如果没有调用该方法,数据就不能正确地保存在文件中 }}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f3E5dRM9-1612791850303)(C:\Users\MuhammadAfif\AppData\Roaming\Typora\typora-user-images\image-20210208175721050.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HNGzf881-1612791850305)(C:\Users\MuhammadAfif\AppData\Roaming\Typora\typora-user-images\image-20210208175647208.png)]
package com.java;import java.io.File;import java.io.IOException;import java.io.PrintWriter;public class WriteDate { public static void main(String[] args) throws IOException { File file = new File("scores.txt");// if (file.exists()) { //如果没有这个if语句块,假如文件scores.txt已经存在,则文件中的内容将在不予用户确认的情况下被丢弃// System.out.println("File already exists");// System.exit(1);// } PrintWriter output = new PrintWriter(file); output.print("John T Smith "); output.println(90);// output.print("Eric K Jones ");// output.println(85); output.close(); //必须使用close()方法关闭文件,如果没有调用该方法,数据就不能正确地保存在文件中 }}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ipLLp9z9-1612791850306)(C:\Users\MuhammadAfif\AppData\Roaming\Typora\typora-user-images\image-20210208175818507.png)]
package com.java;import java.io.File;import java.io.PrintWriter;public class WriteDataWithAutoClose { public static void main(String[] args) throws Exception{ File file = new File("myGirlFriend.txt"); if (file.exists()){ System.out.println("File already exists"); System.exit(0); } //为文件创建一个PrintWriter对象 try(PrintWriter output = new PrintWriter(file)){ output.print("Name: "); output.println("LiNa Wei"); output.println("Gender: Female"); output.println("Height: 162cm"); output.println("Weight: 50.5kg"); } }}
package com.java;import java.io.File;import java.util.Scanner;public class ReadData { public static void main(String[] args) throws Exception { File file = new File("scores.txt"); //为文件创建一个Scanner对象 Scanner input = new Scanner(file); while(input.hasNext()){ String firstName = input.next(); String mi = input.next(); String lastName = input.next(); int socore = input.nextInt(); System.out.println(firstName + " " + mi + " " + lastName + " " + socore); } input.close(); //没有必要关闭输入文件,但这是一种释放被文件占用的资源的好做法 }}
package com.java;//使用try-with-resources语法重写import java.io.File;import java.util.Scanner;public class ReadData { public static void main(String[] args) throws Exception { File file = new File("scores.txt"); //为文件创建一个Scanner对象 try (Scanner input = new Scanner(file)) { while (input.hasNext()) { String firstName = input.next(); String mi = input.next(); String lastName = input.next(); int socore = input.nextInt(); System.out.println(firstName + " " + mi + " " + lastName + " " + socore); } } }}
package com.java;import java.io.File;import java.io.PrintWriter;import java.util.Scanner;public class RepalceText { public static void main(String[] args) throws Exception { //检查命令行参数使用 if (args.length != 4) { System.out.println("Usage: java ReplaceText sourceFile targetFile oldStr newStr"); System.exit(1); } //检查源文件是否存在 File sourceFile = new File(args[0]); if (!sourceFile.exists()) { System.out.println("Source file " + args[0] + " does not exist"); System.exit(2); } //检查目标文件是否存在 File targetFile = new File(args[1]); if (targetFile.exists()) { System.out.println("Target file " + args[1] + " already exists"); System.exit(3); } try (Scanner input = new Scanner(sourceFile); PrintWriter output = new PrintWriter(targetFile); ) { while (input.hasNext()) { String s1 = input.nextLine(); String s2 = s1.replaceAll(args[2], args[3]); output.println(s2); } } }}
例如:
java RepalceText FormatString.java t.txt StringBuilder StringBuffer
args[0]到args[3]分别是FormatString.java t.txt StringBuilder StringBuffer
用StrinBuffer替换FormatString.java中所有的StringBuilder,然后保存在t.txt中
try{ URL url = new URL("http://www.google.com/index.html");}catch(MalformedURLException ex){ ex.printStackTrace();}
Scanner input = new Scanner(url.openStream());
package com.java;import java.io.IOException;import java.net.MalformedURLException;import java.net.URL;import java.util.Scanner;public class ReadFileFromURL { public static void main(String[] args) { System.out.print("Enter a URL: "); String URLstring = new Scanner(System.in).next(); //必须http://开头 try { URL url = new URL(URLstring); int count = 0; //字符计数器 Scanner input = new Scanner(url.openStream()); while (input.hasNext()) { String line = input.nextLine(); count += line.length(); } System.out.println("The file size is " + count + " characters"); } catch (MalformedURLException ex) { System.out.println("Invalid URL"); //URLstring错误时会发生MalformedURLException,所以要处理 } catch (IOException ex) { //openStream()可能发生IOException,所以要处理 System.out.println("I/O Errors: no such file"); } }}/*输入输出:Enter a URL: http://www.baidu.comThe file size is 2283 charactersEnter a URL: http://www.iqiyi.comThe file size is 138 charactersEnter a URL: https://www.bilibili.com/I/O Errors: no such fileEnter a URL: https://www.csdn.net/The file size is 1128133 charactersEnter a URL: https://www.youku.com/The file size is 432763 characters*/
将起始URL添加到名为listOfPendingURLs的列表中;当listOfPendings不为空且listOfTraversedURLs的长度<=100{ //其中100是我们希望爬完100个页面就为止 从listOfPendingURLs移除一个URL; 如果该URL不在listOfTraversedURLs中{ 将其添加到listOfTraversedURLs中; 显示该URL; 读取该URL页面,并且对该页面中包含的每个URL进行如下操作{ 如果不在listOfTraversedURLs中,则将其添加到listOfPendingURLs中; } }}
package com.java;import java.net.URL;import java.util.ArrayList;import java.util.Scanner;public class WebCrawler { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Enter a URL: "); String url1 = input.nextLine(); crawler(url1, 100); //从url1开始爬Web,爬100个url } public static void crawler(String startingURL, int number) { ArrayListlistOfPendingURLs = new ArrayList<>(); //用于存储将要爬的URL列表 ArrayList listOfTraversedURLs = new ArrayList<>(); //用于存储已经爬过的URL listOfPendingURLs.add(startingURL); //将起始的url加入 while (!listOfPendingURLs.isEmpty() && listOfTraversedURLs.size() <= number) { //当还有没爬完的,且爬过的不超过number时 String urlString = listOfPendingURLs.remove(0); //将第一个URL从就绪队列中移除 if (!listOfPendingURLs.contains(urlString)) { //第一个URL没有被爬过 listOfTraversedURLs.add(urlString); System.out.println("Crawl " + urlString); for (String s : getSubURLs(urlString)) { //遍历当前URL的子URL,并加以判断加入就绪队列中 if (!listOfTraversedURLs.contains(s)) listOfPendingURLs.add(s); } } } } //得到urlString的所有子url public static ArrayList getSubURLs(String urlString) { ArrayList list = new ArrayList<>(); try { URL url = new URL(urlString); Scanner input = new Scanner(url.openStream()); int current = 0; while (input.hasNext()) { String line = input.nextLine(); //正确的URL不能包含分行符,因此只要在Web页面中的一行文本中查找URL即可 current = line.indexOf("http:", current); //找到http:的起始位置 while (current > 0) { //该行有URL int endIndex = line.indexOf("\"", current); //假设一个URL以引号“结束 if (endIndex > 0) { //确保一个正确的URL已经被找到 list.add(line.substring(current, endIndex)); //将其加入就绪队列 current = line.indexOf("http:", endIndex); //一行可能有多个URL,寻找下一个URL的起始位置 } else { current = -1; //该行没有URL,返回-1; } } } } catch (Exception ex) { System.out.println("Error: " + ex.getMessage()); } return list; }}
转载地址:http://umzqz.baihongyu.com/