day15

知识点浅记一下

ping 使用来icmp来检查网络是否连通,并没有记录路径。 

tracert 使用icmp包记录并确定数据包访问目标所经过的路由,因此可以依据此命令判断故障发生的位置

netstat 用于监听端口(netstat -a列出所有端口使用情况)跟本地路由表(netstat -r显示本地路由表)

arp 是根据IP地址获取物理地址的一个链路层协议。

socket网络编程

IP地址+端口号组成socket套接字,是tcp和udp的基础

websocket,前端

socket原理机制

1)通信两端都有socket

2)网络通信其实就是socket之间的通信

3)数据在两个socket之间通过IO流传输

socket编程实现即时通信

//客户端
public class clientNode{
public static void main(String[] args){
int server Port = 8081;//服务端端口号(5050到9090之间一般)
String serverIp = "127.0.0.1";//服务端IP地址
//首先直接创建socket,端口号1~1023为系统保存,一般设在1023之外
try{
Socket socket = new Socket(serverIp,port); InputStreamReader reader = new InputStreamReader(System,in);//后面,操作系统级别的输入流
//创建 获取键盘输入内容 的字符输入流
BufferedReader systemIn = new BufferedReader(reader);
//创建字符输出流,向服务端输出内容
PrintWriter socketOut = new PrintWriter(socket.getOutStream()); //创建字符输入流,接受客户输入的内容
BufferedReder socketIn = newBufferedReader(new InputStreamReader(socket.getInputStream())) while(true){
//输入流获取键盘输入内容
Stringreadline = systemIn.readLine(); //输出流向服务端发送数据
socketOut.println(readline);
socketOut.flush(); //读取服务端返回的数据
String serverStr = socketIn.readLine();
System.out.println("服务端:" + serverStr);
if(serverStr.equals("bye")){
break;
} }
systemIn.close();
socketIn.close();
socketOut.close();
socket.close();
serverSocket.close(); }//try
}
}

服务端

public class ServerNode{
public static void main(String[] args){
int port = 8081;
try{
//创建ServerSocket,监听端口8081
ServerSocket serveSocket = new ServerSocket(port);
//调用服务器的accept方法,接收来自客户端的连接请求,在接收到客户端连接请求之前,此方法会进行阻塞(程序会在这等待),当有申请连接时会建立连接并返回一个socket
Socket socket = serverSocket.accept();
//创建服务端输入流:获取系统输入的数据
BufferedReader systemIn = new BufferedReader(new InputStreamReader(System.in));
//创建客户端输入流,获取客户端传输的数据
InputStreamReader reader = new InputStreamReader(socket.getInputStream())
BufferedReader socketIn = new BufferedReader(reader);
//创建输出流,用于向客户端返回数据
PrintWriter socketOut = new PrintWriter(socket.getOutputStream); //
BufferedReader systemIn = new BufferedReader(new InputStreamReader(System.in)); //创建输出流,用于向客户端返回数据
PrintWriter socketOut = new PrintWriter(socket.getOutputStream); while(true){ String clientStr = socketIn.readLine(); System.out.println("接收到客户端的内容:" + clientStr); if(readline.equals("bye")){
//服务端向客户端输出内容
socketOut.println(systemIn.readLine());
socket.flush(); break;
} clientStr = socketIn.readLine();
} systemIn.close();
socketIn.close();
socketOut.close();
socket.close(); } }
}

反射refect

反射机制的定义

程序运行中创造任意一个类对象,了解任意一个对象所属的类,了解任意一个类的成员变量和方法,并且可以调用

反射被视为动态语言的关键

1.Class(类)

解释什么叫反射

在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性, 并且能改变它的属性。

创建Class类的方式

1)类名.class

Class c1 = Man.class;

2)类的对象名.getClass()

Man m = new Man();
Class c2 = m.getClass();

3)Class.forName("完整包名");

Class c3 = Class.forName("xxx.day20.Man");

创建类对象有几种方式

1.new 2.clone 3.反序列化 4.反射的Class类的newInstance()方法

Java在将.class字节码文件载入时,JVM将产生一个java.lang.Class 对象代表该.class字节码文件,从该Class对象中可以获得类的许多基本信息,这就是反射机制

注意:

1)通过Class类的对象,可以知道他所描述的类的信息;

2)Class不是所有类的父类,Object才是(.class文件)

Class类表示的是一个类的.class文件

Class c = Man.class;//获取Man类的class文件

Man m = (Man)c.newInstance();//创建该类的对象

//使用.newInstance()方法,Man类必须有无参构造方法
Field f = c.getDeclaredField("name");
//获取类中的指定变量(包括私有变量)
syso(f.getName);
Field f = c.getField("name");//获取类中的指定变量(不包括私有)
syso(f.getName());
//获取类中所有变量返回field类型的数组
Field[] fs = c.getDeclaredFields();
foreach(){
syso(f.getType());//getType()获取变量的数据类型
}
//根据指定方法名和指定的参数列表数据类型,获取方法对象
Method m = c.getMethod(null,null);
//getMethod(String name,Class...parameters Type)
//name 方法名
//parameters Type参数列表的数据类型
getDeclaredMethod
//获取一个类的构造方法对象
Constructor cm = c.getConstructors(null);//声明参数列表
getConstructor()

2.Field(获取变量对象)

java.lang.reflect.Field类是记录对象属性的类

可以操作类中私有,以及公有等全部属性和属性的信息

常用方法

Field f = c.getDeclaredField("name");
Field f2 = c.getDeclaredField("age"); //获得属性名称
f.getName(); //获得属性类型
f.getType() //取得obj对象中这个属性的值,例如获取Man中的name存在张三名字
String v = (String)f2.get(Object obj) //给obj对象中这个属性赋值
f2.set(Object obj, x ) //开启私有变量的访问权限
f2.setAccessible(true); f2.setAccessible(true);//私有的变量需要开启私有变量的访问权限
f2.set(m, 12);

class

1)获取一个类的所有信息(变量、方法、构造方法)

2)创建类对象newInstance()

Field

1)访问变量或给变量赋值

Method

1)执行具体类对象的指定方法

3.Method(获取方法对象)

Class c = Man.class;
Man man = new Man();
//Method m = c.detDeclareMethod("speak",null);
//m.invoke(man,null); Method m = c.getDeclareMethod("speak",String.class,int.class);
m.invoke(man,"add",123);

最新文章

  1. spring MVC 尝试传参json(应用部分)
  2. YY前端课程4
  3. Thinking in java学习笔记之finalize
  4. Leetcode SortList
  5. centos7上consul的集群安装
  6. iOS开发UI篇—九宫格坐标计算
  7. 工作中常用shell之ssh登陆不用输入"yes"
  8. hdu1231最大连续子序列
  9. 使用TypeScript如何提升JavaScript编程效果?
  10. self,parent,this区别
  11. Sqrt(x)——LeetCode
  12. eclipse 编辑 python 中文乱码的解决方案
  13. os即时通讯客户端开发之-mac上安装MySQL
  14. Dynamics CRM2013 Form利用window.location.reload()进行全局刷新带来的问题及解决办法
  15. message.go
  16. 【Android Studio安装部署系列】目录
  17. Python编程Day6——元组类型、字典类型、集合
  18. BZOJ3309 DZY Loves Maths 莫比乌斯反演、线性筛
  19. linux的PAM认证和shadow文件中密码的加密方式
  20. October 10th 2017 Week 41st Tuesday

热门文章

  1. Windows Server体验之管理
  2. Java SE note1
  3. Django 聚合分组F与Q查询及choices
  4. 3.云原生之Docker容器三大核心概念介绍
  5. 使用 Loki 进行日志报警(二)
  6. Logstash:如何使用Elasticsearch,Logstash和Kibana管理Apache日志
  7. Nginx配置中一个不起眼字符"/"的巨大作用
  8. frps服务端与nginx可共用443端口
  9. 从源码分析 MGR 的新主选举算法
  10. 大数据技术之HBase原理与实战归纳分享-中