Day28
五道问题
-
一个IP对于着哪个类的一个对象? 实例化这个类的方式是?两个常用的方法是?
InetAddress类
InetAddress.getbyName(String host)
InetAddress.getlocalHost():获取本地Ip
getHostName()
getHostAddress()
-
传输层的TCP协议和UDP协议的主要区别是?
TCP :可靠的数据传输(三次握手);进行大数据量的传输;效率低
UDP:不可靠;以数据报形式发送,数据报限定为64k;效率高
-
什么是URL,写一个URL。
URL:统一资源定位符。
URL url = new URL(“http://192.168.1.1:8080/examples/hello.txt?username=tom”)
-
对象序列化机制的理解。
序列化过程:将内存中的java对象保存到磁盘中或通过网络传输出去。
反序列过程:将磁盘文件中的对象还原为内存中的java对象。
-
对象想要实现序列化,需要满足几个条件?
-
1.实现Serializable的接口。---->标识接口,这个接口没有任何方法。
-
2.需要当前类,提供一个全局常量:serialVersionUID
-
3.要求对象的属性也必须是可序列的。还必须保证其内部属性也必须是可序列化的。(默认情况下,基本数据类型是可序列的)
Java反射机制
重点:
1.获取Class实例
2.创建运行时类的对象
3.调用运行时类的指定结构
概述:
反射被视为动态语言的关键,反射机制允许程序在执行期借助于反射API取得任何类得内部信息,并能够直接操作任意对象得内部属性和方法。
反射相关的API
java.lang.Class:代表一个类。
java.lang.reflect.Method:代表类的方法
java.lang.reflect.Field:代表类的成员变量
java.lang.reflect.Constructor:代表类的构造器
以下的类都可以有Class对象
-
class: 外部类,成员(成员内部类、静态内部类),局部内部类,匿名内部类
-
interface:接口
-
[] 数组
-
enum:枚举
-
annotation:注解@interface
-
primitive type:基本数据类型
-
今日代码
package com.sorrymaker.reflection;
import org.junit.Test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
*
* 疑问:1.反射机制与面向对象中的封装性是不是矛盾?如何看待两个技术?
* 不矛盾,封装性是建议你别调用私有的,而反射是允许你调用私有的,一个是给建议,一个是功能性。
* 2.通过直接new 对象或是反射的方式都可以调用公共的结构,开发中到底用哪个?
* 建议使用 new 的方式,
* 什么时候会用反射的方式:编译的时候不确定到底要new哪个对象,前端发送的对象不确定,所以后端也需要动态的应对,需要用到后端。
* 反射的特征:动态性,
*/
public class Reflection {
/**
* 关于java.lang.Class类的理解
* 1.类加载的过程
* 程序经过java.lang.exe命令以后,会生成一个或多个字节码文件(.class结尾),接着我们使用
* java.exe命令对某个字节码文件进行解释运行。相当于将某个字节码文件加载到内存中,此过程
* 就称为类的加载。加载到内存中的类,我们就称为运行时类,此运行时类,就作为Class的一个实例。
*
* 2.换句话说,Class的实例就对应着一个运行时类,
*
*/
