目录
一、Socket通信
解析:
Socket套接字,就是源Ip地址+目标IP地址+源端口号和目标端口号
- 服务器端:ServerSocket提供的实例
- ServerSocket server= new ServerSocket(port)
- Socket socket=server.accept();
- 客户端:Socket提供的实例
- Socket soc=new Socket(ip, port)
//server
ServerSocket server = new ServerSocket(port);
Socket socket = server.accept();
InputStream inputStream = socket.getInputStream();
inputStream.close();
socket.close();
server.close();
//client
Socket socket = new Socket(host, port);//server hostip,ort
socket.getOutputStream();
outputStream.close();
socket.close();
参考网址:https://blog.csdn.net/weixin_39478524/article/details/113566466
二、package
解析:
包的作用
- 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
- 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
- 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类、接口、枚举和注释等。
三、内部类
解析:
- 1、静态内部类:
- 可以访问外部的静态资源,包括静态私有资源
- 不能访问非静态资源,可以不依赖外部类实例而实例化
- 2、成员内部类:
- 可以访问外部的所有资源
- 不能定义静态资源,因为实例化本身依赖外部类
- 3、局部内部类:
- 不能被访问修饰符修饰,也不能被static修饰
- 只能访问所在代码块或者方法中被定义为final的局部变量
- 4、匿名内部类:
- 没有类名的内部类,不能使用class,extends和implements,没有构造方法。
- 多用于GUI中的事件处理。
- 不能定义静态资源
- 只能创建一个匿名内部类实例。
- 一个匿名内部类一定是在new后面的,这个匿名类必须继承一个父类或者实现一个接口。
- 匿名内部类是局部内部类的特殊形式,所以局部内部类的所有限制对匿名内部类也有效。
四、static类变量
解析:
x的修饰符为 static,所以x为类变量,
即对于所有的实例来说,他们访问的x为同一个x,类变量存储在方法区,不属于每个实例的私有
-
刚开始x=100
-
调用hs1.x++,x为101;
-
调用hs2.x++,x为102;
-
调用hs1.x++,x为103 (此时hs1指向了一个新的HasStatic实例,但是依然访问的是同一个X)
-
调用HasStatic.x-- x为102
五、取反运算符“~”
解析:
“~”代表按位取反,~j 表示 对 j 按位取反,
取反公式:~i= -(i+1)
推导过程:-n = ~n + 1 → ~n = -n -1
~j:~10 = - 10 - 1 = -11
i + j = 5 + -11 = -6
二进制推导
计算机本身储存的就是补码:
那么10的补码就是10的原码:0000 0000 0000 1010
~10的补码就是:1111 1111 1111 0101
~10的反码就是:1111 1111 1111 0100——补码减1
~10的原码就是:1000 0000 0000 1011——反码取反
换算为整数为-11,所以未5-11=-6
六、变量
解析:
类变量:独立于方法之外的变量,用 static 修饰
实例变量(全局变量):独立于方法之外的变量,不过没有 static 修饰
局部变量:类的方法中的变量
- A:类的成员变量包括实例变量和类变量(静态变量),成员方法包括实例方法和类方法(静态方法)。 A正确
- B:类变量(静态变量)用关键字static声明,B错误
- C:方法中的局部变量在方法被调用加载时开始入栈时创建,方法入栈创建栈帧,包括局部变量表操作数栈,局部变量表存放局部变量,并非在执行该方法时被创建,C错误
- D:局部变量被使用前必须初始化,否则程序报错。D正确