zoukankan      html  css  js  c++  java
  • Java 异常处理与输入输出

    一、异常

    1.1

    package exception;
    
    import java.util.Scanner;
    
    public class ArrayIndex {
    
    	public static void main(String[] args) {
    		int[] a=new int[10];
    		Scanner in=new Scanner(System.in);
    		int index=in.nextInt();
    		try
    		{
    			a[index]=25;
    			System.out.println("right");
    		}
    		catch(ArrayIndexOutOfBoundsException b)
    		{
    		    System.out.println("there is a wrong");	
    		}
            in.close();
    	}
    
    }
    

    出现异常就会到catch。

    1.2 调用的函数中出现异常

    package exception;
    
    import java.util.Scanner;
    
    public class ArrayIndex {
    
    	public static void f()
    	{
    		int[] a=new int[10];
    		a[10]=15;
    		System.out.println("right");
    	}
    	public static void main(String[] args) {
    		
    		try
    		{
    			f();
    		}
    		catch(ArrayIndexOutOfBoundsException b)
    		{
    		    System.out.println("there is a wrong");	
    		}
    		System.out.println("end");
            
    	}
    
    }
    

    1.3

    package exception;
    
    import java.util.Scanner;
    
    public class ArrayIndex {
    
    	public static void f()
    	{
    		int[] a=new int[10];
    		a[10]=15;
    		System.out.println("hello");
    	}
    	
    	public static void g()
    	{
    		f();
    	}
    	public static void h()
    	{
    		int i=10;
    		if(i<100)
    			g();
    	}
    	public static void k()
    	{
    		try {
    			h();
    		}
    		catch(ArrayIndexOutOfBoundsException e)
    		{
    			 System.out.println("k()");	
    		}
    	}
    	
    	
    	public static void main(String[] args) {
    		
    		try
    		{
    			k();
    		}
    		catch(ArrayIndexOutOfBoundsException e)
    		{
    		    System.out.println("there is a wrong");	
    		}
    		System.out.println("end");
            
    	}
    
    }
    

    try ...catch 里出现嵌套时,只会输出里层嵌套的内容。

    catch的存在就是为了处理出现的异常。

    相当于在k()函数中发现了异常,并且利用catch已经将异常解决了。所以在main()中便默认k()没有了异常,所以不会输出“there is a wrong”。

    1.4

    package exception;
    
    import java.util.Scanner;
    
    public class ArrayIndex {
    
    	public static void f()
    	{
    		int[] a=new int[10];
    		a[10]=15;
    		System.out.println("hello");
    	}
    	
    	public static void g()
    	{
    		f();
    	}
    	public static void h()
    	{
    		int i=10;
    		if(i<100)
    			g();
    	}
    	public static void k()
    	{
    		try {
    			h();
    		}
    		catch(ArrayIndexOutOfBoundsException e)
    		{
    			 System.out.println("k()");	
    			 throw e;//抛出异常
    		}
    	}
    	
    	
    	public static void main(String[] args) {
    		
    		try
    		{
    			k();
    		}
    		catch(ArrayIndexOutOfBoundsException e)
    		{
    		    System.out.println("there is a wrong");	
    		    System.out.println(e.getMessage());//输出e的值,10,这是指数组a[10]处赋值出现问题
    		    System.out.println(e);
    		    e.printStackTrace();//显示调用路径
    		}
    		System.out.println("end");
            
    	}
    
    }
    

    throw e:相当于将处理的异常又重新添加加进来,这样“there is a wrong ”也便会输出。

    或者说对于异常catch没有处理完全。所以还需要再度输出。

    1.5

    二、流

    2.1 二进制数据

    package Hello;
    
    import java.io.IOException;
    import java.util.Scanner;
    
    public class test {
    	
    	public static void main(String[] args) {
    		System.out.println("Hello world");
    		byte[] buffer=new byte[1024];//定义了字节数组
    		try {
    			int len=System.in.read(buffer);//往buffer中写入数据,并返回长度
    			String s=new String(buffer, 0, len);//从buffer中0的位置开始,获取len长度的字节
    			System.out.println("读到了"+len+"字节");
    			System.out.println(s);
    			System.out.println("s的长度是:"+s.length());
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }
    

    回车和换行算两个字符。

     

    2.2 

    package Hello;
    
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Scanner;
    
    public class test {
    	
    	public static void main(String[] args) {
    		System.out.println("Hello world");
    		byte[] buffer=new byte[5];
    		for(int i=0;i<buffer.length;i++)
    		{
    			buffer[i]='a';
    		}
    		try {
    			FileOutputStream out=new FileOutputStream("a.txt");
    			out.write(buffer);
    			out.close();
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }
    

    2.3 过滤器

    package Hello;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Scanner;
    
    import javax.imageio.stream.FileImageOutputStream;
    
    public class test {
    	
    	public static void main(String[] args) {
    		System.out.println("Hello world");
    		byte[] buffer=new byte[10];
    		for(int i=0;i<buffer.length;i++)
    		{
    			buffer[i]=(byte) i;
    		}
    		try {
    			DataOutputStream out=new DataOutputStream(
    					new BufferedOutputStream(
    							new FileOutputStream("b.dat")));//只能处理字节
    			int i=123454;
    			out.writeInt(i);
    			out.close();
    			
    			DataInputStream in=new DataInputStream(
    					new BufferedInputStream(
    							new FileInputStream("b.dat")));
    			int j=in.readInt();
    			System.out.println(j);
    			
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }
    

    以16进制存储。

    2.4 文本

    package Hello;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.util.Scanner;
    
    import javax.imageio.stream.FileImageOutputStream;
    
    public class test {
    	
    	public static void main(String[] args) {
    		System.out.println("Hello world");
    		byte[] buffer=new byte[10];
    		for(int i=0;i<buffer.length;i++)
    		{
    			buffer[i]=(byte) i;
    		}
    		try {
    			PrintWriter out=new PrintWriter(
    					new BufferedWriter(
    							new OutputStreamWriter(
    									new FileOutputStream("c.txt"))));//
    			int i=12345;
    			out.println(i);
    			out.close();
    			
    			BufferedReader in=new BufferedReader(
    					new InputStreamReader(
    							new FileInputStream("c.txt")));
    			String line;
    			while((line=in.readLine())!=null)
    			    System.out.println(line);
    			
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }
    

    2.5编码格式

    package Hello;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.util.Scanner;
    
    import javax.imageio.stream.FileImageOutputStream;
    
    public class test {
    	
    	public static void main(String[] args) {
    		System.out.println("Hello world");
    		byte[] buffer=new byte[10];
    		for(int i=0;i<buffer.length;i++)
    		{
    			buffer[i]=(byte) i;
    		}
    		try {
    			PrintWriter out=new PrintWriter(
    					new BufferedWriter(
    							new OutputStreamWriter(
    									new FileOutputStream("c.txt"))));//
    			int i=12345;
    			out.println(i);
    			out.close();
    			
    			BufferedReader in=new BufferedReader(
    					new InputStreamReader(
    							new FileInputStream("a.txt"),"GBk"));//设置编码格式
    			String line;
    			while((line=in.readLine())!=null)
    			    System.out.println(line);
    			
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }
    

    GBK编码时,正确读出

    utf8时

    2.6 格式化输出

    三、流应用

    package Hello;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.InetAddress;
    import java.net.Socket;
    
    public class hello {
    	
    	public static void main(String[] args) {
    		try {
    			Socket socket=new Socket(InetAddress.getByName("localhost"),12345);
    			PrintWriter out=new PrintWriter(
    					new BufferedWriter(
    							new OutputStreamWriter(
    									socket.getOutputStream())));//
    			out.println("hello");
    			
    			BufferedReader in=new BufferedReader(
    					new InputStreamReader(
    							socket.getInputStream()));//设置编码格式
    			String line;
    			line=in.readLine();
    			System.out.println(line);
    			out.close();
    			socket.close();		
    		}catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }
    

    四、对象串行化

    package Hello;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutput;
    import java.io.ObjectOutputStream;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.io.Serializable;
    import java.net.InetAddress;
    import java.net.Socket;
    
    class Student implements Serializable{ //可串行化的类
    	private String name;
    	private int age;
    	private int grade;
    	
    	public Student(String name,int age,int grade)
    	{
    		this.name=name;
    		this.age=age;
    		this.grade=grade;
    	}
    	
    	public String toString()
    	{
    		return name+" "+age+" "+grade;
    	}
    }
    
    public class hello {
    	
    	public static void main(String[] args) {
    		try {
    			Student s1=new Student("John",18,5);
    			System.out.println(s1);
    			ObjectOutputStream out=new ObjectOutputStream(
    					new FileOutputStream("obj.dat"));
    			out.writeObject(s1);
    			out.close();
    			ObjectInputStream in=new ObjectInputStream(
    					new FileInputStream("obj.dat"));
    			Student s2=(Student)in.readObject();
    			System.out.println(s2);
    		}catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }
    

    保存在obj.dat中的值  

  • 相关阅读:
    owncloud7.0.2.1升级8.0.3
    iptables删除规则
    ESXi Install OpenWRT
    Eclipse连接VirtualBox中的Android x86
    win7、linux安装使用pip、mitmproxy
    linux php bom
    ios项目上传svn丢失*.a文件
    升级owncloud到7.0.2
    phpinfo有mysqlnd没有mysql
    Cacti监控Centos抓包unreachable
  • 原文地址:https://www.cnblogs.com/ruo-li-suo-yi/p/9184702.html
Copyright © 2011-2022 走看看