java之网络编程以及反射

本文介绍了一个基于TCP协议的简单聊天程序实现,包括客户端和服务端的交互流程,并通过Java反射机制展示了如何动态调用对象的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络编程以及反射:

代码演示:

public class Demo_ZhangWuJi {//1.利用TCP方式实现张无忌与李寻欢聊天

public static void main(String[] args) throws IOException {

ServerSocket server = new ServerSocket(55555);

Socket socket = server.accept();//接授客户的请求

InputStream is = socket.getInputStream();//获取客户端的输入流

OutputStream os = socket.getOutputStream();//获取客户端的输出流

//System.out.println("苏绪回答雨晴:");/

// byte[]arr =new byte[1024];

// is.read(arr);

// System.out.print(new String(arr));

// os.write("不好".getBytes());

 

//改造过程

//1.把字节输入流转化为字符流

InputStreamReader isr = new InputStreamReader(is);

//2.把上述字符流包装成缓冲区的字符流

BufferedReader br = new BufferedReader(isr);

//3.输出流打包成打印流

PrintStream ps = new PrintStream(os);

Scanner input = new Scanner(System.in);

while (true) {

System.out.println("来自李寻欢的的问题:" + br.readLine());

System.out.println("苏绪答:");

String answer = input.nextLine();

ps.print(answer);

}//来个死循环

// socket.close();}}

public class Demo_LiXunHuan {//1.利用TCP方式实现苏绪与阿香聊天

public static void main(String[] args) throws UnknownHostException, IOException {

Socket socket = new Socket("127.0.0.1",55555);

InputStream is = socket.getInputStream();

OutputStream os = socket.getOutputStream();



InputStreamReader isr = new InputStreamReader(is);

BufferedReader br = new BufferedReader(isr);

PrintStream ps = new PrintStream(os);

Scanner sc = new Scanner(System.in);

while (true) {

System.out.println("阿香问:");

String question = sc.nextLine();

ps.print(question);

System.out.println("来自苏绪的回答:" + br.readLine());}

//此IO不行

// os.write(question.getBytes());



// byte[] arr = new byte[1024];

// is.read(arr);

// System.out.print(new String(arr));

//System.out.println("雨晴问:");



// socket.close();}}

public class Student {

private String name;

private int age;

private String KeMu ;

public String surname;

public Student() {



}

public Student(String name, int age,String KeMu) {



this.name = name;

this.age = age;

this.KeMu = KeMu;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getKeMu() {

return KeMu;

}

public void setKeMu(String keMu) {

KeMu = keMu;

}

@Override

public String toString() {

return "Student [name=" + name + ", age=" + age + ",KeMu="+KeMu+"]";

}



public void study() {

System.out.println(getName()+"好好学习,天天向上");

}



public void study(int num) {

System.out.println(getName()+"今天学习了" + num + "个小时");

}

public void study(String KeMu) {

System.out.println(getName()+"今天学习了" + KeMu );

}



}

反射的测试类:

public static void main(String[] args) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {

Student stu = new Student();

Class clazz = stu.getClass();//获取class文件对象

System.out.println(clazz.getName());

//获取该类的构造方法,并构造一个实例化对象

System.out.println("===========获取该类的构造方法,并构造一个实例化对象==========");

Constructor c;

try {

c = clazz.getConstructor();

Student student = (Student)c.newInstance();

student.setName("彭于晏");

student.setAge(35);

student.setKeMu("帽子戏法");

System.out.println(student);

} catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}



//获取带参构造方法

System.out.println("================获取带参构造方法==============");

Constructor c2 = clazz.getConstructor(String.class,int.class,String.class);//别忘了class

Student student2 = (Student)c2.newInstance("胡歌",35,"哲学史");

student2.study(9);

//遍历所有属性

System.out.println("==========遍历所有属性==============");

//私有的用以下这种方法

Field[] fs = clazz.getDeclaredFields();

for(Field fo:fs) {

System.out.println(fo.getName());

}

//如何获取并使用其中的方法

//获取其中的某个方法

//不带参的方法

System.out.println("==============不带参的方法==============");

Method m1 = clazz.getMethod("study");

m1.invoke(student2);

// //带参的方法

// System.out.println("====================带参的方法===================");

// Method m2 = clazz.getMethod("study", int.class);

// m2.invoke(student2, 5);

//获取遍历所有方法
System.out.println("====================获取遍历所有方法==================");

Method[] methods = clazz.getMethods();

for(Method mth:methods) {

System.out.println(mth.getName());}}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值