划红线的地方为什么可以这么用 怎么来的 可以解释一下吗
package com.itbjsxt.TestThread; class A implements Runnable{ private Thread C; public A(Thread C){ this.C = C; } @Override public void run() { for (int i =0;i<10;i++){ System.out.println(Thread.currentThread().getName()+"A"+i); if (i ==5){ try { C.join(); } catch (InterruptedException e) { throw new RuntimeException(e); } } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } class B implements Runnable{ @Override public void run() { for (int i =0;i<15;i++){ System.out.println(Thread.currentThread().getName()+"B"+i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } public class ThreadTest1 { public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(new B()); Thread t = new Thread(new A(t1)); t.start(); t1.start(); for (int i =0;i<15;i++) { System.out.println(Thread.currentThread().getName() + " " + i); if (i ==2){ t.join(); } } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } 请问一下老师,这里面用到的this.C和直接C.join()执行结果一样那两者有什么区别呢,我不是很理解this
老师
DataFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
这个类型转换的话,对软件的版本有需求吗,为什么我的会提示我SimpleDateFormat无法转换为DataFormat,必须是SimpleDateFormat去new一个SimpleDateFormat,或者DataFormat去new一个DataFormat,而且像上面那么声明以后没有parse这个方法,请老师指点。
代码原图--报错
代码原图--修改之后
package com.Han; import java.io.FileInputStream; import java.io.IOException; public class Test2 { public static void main(String[] args) { FileInputStream fis = null; try{ fis = new FileInputStream("d:/mycode/aa/a.txt"); StringBuilder sb = new StringBuilder(); int temp = 0; while((temp = fis.read()) != -1){ sb.append((char) temp); } System.out.println(sb); }catch(Exception e){ e.printStackTrace(); }finally{ try{ if(fis != null) { fis.close(); } } catch (IOException e){ e.printStackTrace(); } } }
这是属于什么类型问题
为啥这里可以输出oldlu啊 明明没用到输出啊
红线部分的知识点是啥来着 可以解释一下吗
老师有没有和视频老师一样API帮助文档下载地址啊,麻烦发一下地址
为啥这里输出是abcdef啊
老师我想问问 我这里报错是在哪里啊 我排查了下 没找出原因
package com; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; /*发送消息线程*/ /** * 发送消息线程 */ class Send1 extends Thread{ private Socket socket; private Scanner scanner; public Send1(Socket socket,Scanner scanner){ this.socket = socket; this.scanner = scanner; } @Override public void run() { this.sendMsg(); } /** * 发送消息 */ private void sendMsg(){ //创建向对方输出消息的流对象 try(PrintWriter pw = new PrintWriter(this.socket.getOutputStream())){ while(true){ String msg = scanner.nextLine(); pw.println(msg); pw.flush(); } }catch(Exception e){ e.printStackTrace(); } } } /** * 接收消息的线程 */ class Receive1 extends Thread{ private Socket socket; public Receive1(Socket socket){ this.socket = socket; } @Override public void run() { this.receiveMsg(); } /** * 用于接收对方消息的方法 */ private void receiveMsg(){ //创建用于接收对方发送消息的流对象 try(BufferedReader br = new BufferedReader(new InputStreamReader(this.socket.getInputStream()))){ while(true){ String msg = br.readLine(); System.out.println("他说:"+msg); } }catch(Exception e){ e.printStackTrace(); } } } public class GoodTCP { public static void main(String[] args) { Scanner scanner = null; ServerSocket serverSocket = null; Socket socket = null; try{ scanner = new Scanner(System.in); System.out.println("请输入:server,<port> 或者:<ip>,<port>"); String str = scanner.nextLine(); String[] arr = str.split(","); if("server".equals(arr[0])){ //启动服务端 System.out.println("TCP Server Listen at "+arr[1]+" ....."); serverSocket = new ServerSocket(Integer.parseInt(arr[1])); socket = serverSocket.accept(); System.out.println("连接成功!"); }else{ //启动客户端 socket = new Socket(arr[0],Integer.parseInt(arr[1])); System.out.println("连接成功!"); } //启动发送消息的线程 new Send(socket,scanner).start(); //启动接收消息的线程 new Receive(socket).start(); }catch(Exception e){ e.printStackTrace(); }finally{ if(serverSocket != null){ try { serverSocket.close(); }catch (IOException e){ e.printStackTrace(); } } } } }
老师为什么在我第二次运行以后,在里面输入ip地址跟端口以为什么会报空指针异常啊,而且这个空指针异常不是这个程序里面的事这个程序里面的空指针异常
package com; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; //创建点对点的聊天应用 //创建服务端 /** * 发送消息线程 */ class Send extends Thread{ private Socket socket; public Send(Socket socket){ this.socket = socket; } public Send(Socket socket, Scanner scanner) { } @Override public void run() { /* String str = null; if (str!=null){ System.out.println(str.charAt(0)); }*/ this.sendMsg(); } /** * 发送消息 */ private void sendMsg(){ //创建Scanner对象 try(Scanner scanner = new Scanner(System.in); //创建向对方输出消息的流对象 PrintWriter pw = new PrintWriter(this.socket.getOutputStream());){ while(true){ String msg = scanner.nextLine(); pw.println(msg); pw.flush(); } }catch(Exception e){ e.printStackTrace(); } } } /** * 接收消息的线程 */ class Receive extends Thread{ private Socket socket; public Receive(Socket socket){ this.socket = socket; } @Override public void run() { this.receiveMsg(); } /** * 用于接收对方消息的方法 */ private void receiveMsg(){ //创建用于接收对方发送消息的流对象 try(BufferedReader br = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));){ while(true){ String msg = br.readLine(); System.out.println("他说:"+msg); } }catch(Exception e){ e.printStackTrace(); } } } public class ChatSocketServer { public static void main(String[] args) { try(ServerSocket serverSocket = new ServerSocket(8080);){ System.out.println("服务端启动,等待连接。。。。。"); Socket socket = serverSocket.accept(); System.out.println("连接成功!"); new Send(socket).start(); new Receive(socket).start(); }catch(Exception e){ e.printStackTrace(); } } }
package com; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; //创建点对点的聊天应用 //创建服务端 /** * 发送消息线程 */ class Send extends Thread{ private Socket socket; public Send(Socket socket){ this.socket = socket; } public Send(Socket socket, Scanner scanner) { } @Override public void run() { this.sendMsg(); } /** * 发送消息 */ private void sendMsg(){ //创建Scanner对象 try(Scanner scanner = new Scanner(System.in); //创建向对方输出消息的流对象 PrintWriter pw = new PrintWriter(this.socket.getOutputStream());){ while(true){ String msg = scanner.nextLine(); pw.println(msg); pw.flush(); } }catch(Exception e){ e.printStackTrace(); } } } /** * 接收消息的线程 */ class Receive extends Thread{ private Socket socket; public Receive(Socket socket){ this.socket = socket; } @Override public void run() { this.receiveMsg(); } /** * 用于接收对方消息的方法 */ private void receiveMsg(){ //创建用于接收对方发送消息的流对象 try(BufferedReader br = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));){ while(true){ String msg = br.readLine(); System.out.println("他说:"+msg); } }catch(Exception e){ e.printStackTrace(); } } } public class ChatSocketServer { public static void main(String[] args) { try(ServerSocket serverSocket = new ServerSocket(8888);){ System.out.println("服务端启动,等待连接。。。。。"); Socket socket = serverSocket.accept(); System.out.println("连接成功!"); new Send(socket).start(); new Receive(socket).start(); }catch(Exception e){ e.printStackTrace(); } } }
老师为啥我这边连接成功以后会显示我上面这个代码的36,27行有空指针异常呢,不知道怎么处理
老师我这边没有连开两个启动程序的东西
我重写了toStirng,返回的是空,可是foreach自动调用返回的不是空呀,调用的还是之前的toString方法,这是为啥呀
Set<Student> set = new TreeSet<>(new StudentComparator);
这一步TreeSet传入StudentComparator怎么理解呢
直接输出clazz为啥调用toString方法,什么时候自动调用toString方法?
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637