【黑马程序员】网络编程与反射
来源:互联网 发布:使用迅雷网络异常 编辑:程序博客网 时间:2024/05/27 19:26
package cn.itcast_02;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.util.Scanner;public class PhoneDemo {public static void main(String[] args) {Phone p = new IPhone();p.call();System.out.println("------------");// 需求:我想在接电话前,听彩铃PhoneDecorate pd = new RingPhoneDecorate(p);pd.call();System.out.println("------------");// 需求:我想在接电话后,听音乐pd = new MusicPhoneDecorate(p);pd.call();System.out.println("------------");// 需求:我要想手机在接前听彩铃,接后听音乐// 自己提供装饰类,在打电话前听彩铃,打电话后听音乐pd = new RingPhoneDecorate(new MusicPhoneDecorate(p));pd.call();System.out.println("----------");// 想想我们在IO流中的使用// InputStream is = System.in;// InputStreamReader isr = new InputStreamReader(is);// BufferedReader br = new BufferedReader(isr);BufferedReader br = new BufferedReader(new InputStreamReader(System.in));BufferedWriter bw = new BufferedWriter((new OutputStreamWriter(System.out)));Scanner sc = new Scanner(System.in);}}
1:网络编程(理解)
(1)网络编程:用Java语言实现计算机间数据的信息传递和资源共享
(2)网络编程模型
(3)网络编程的三要素
A:IP地址
a:点分十进制
b:IP地址的组成
c:IP地址的分类
d:dos命令
e:InetAddress
B:端口
是应用程序的标识。范围:0-65535。其中0-1024不建议使用。
C:协议
UDP:数据打包,有限制,不连接,效率高,不可靠
TCP:建立数据通道,无限制,效率低,可靠
(3)Socket机制
A:通信两端都应该有Socket对象
B:所有的通信都是通过Socket间的IO进行操作的
(4)UDP协议发送和接收数据(掌握 自己补齐代码)
发送:
创建UDP发送端的Socket对象
创建数据并把数据打包
发送数据
释放资源
接收:
创建UDP接收端的Socket对象
创建数据包用于接收数据
接收数据
解析数据包
释放资源
(5)TCP协议发送和接收数据(掌握 自己补齐代码)
发送:
创建TCP客户端的Socket对象
获取输出流,写数据
释放资源
接收:
创建TCP服务器端的Socket对象
监听客户端连接
获取输入流,读取数据
释放资源
(6)案例:
A:UDP
a:最基本的UDP协议发送和接收数据
b:把发送数据改进为键盘录入
c:一个简易聊天小程序并用多线程改进
B:TCP
a:最基本的TCP协议发送和接收数据
b:服务器给出反馈
c:客户端键盘录入服务器控制台输出
d:客户端键盘录入服务器写到文本文件
e:客户端读取文本文件服务器控制台输出
f:客户端读取文本文件服务器写到文本文件
g:上传图片
h:多线程改进上传文件
网络编程三要素:
A:IP地址
B:端口
C:协议
举例:
我想和林青霞说话了。肿么办?
A:我要找到林青霞。
B:对她说话,要对耳朵说。
C:我说什么呢?"I Love You"
但是,她没学过英语,听不懂。
我没必要说英语,说汉语就可以了:我爱你
IP地址:
网络中计算机的唯一标识。
计算机只能识别二进制的数据,所以我们的IP地址应该是一个二进制的数据。
但是呢,我们配置的IP地址确不是二进制的,为什么呢?
IP:192.168.1.100
换算:11000000 10101000 00000001 01100100
假如真是:11000000 10101000 00000001 01100100的话。
我们如果每次再上课的时候要配置该IP地址,记忆起来就比较的麻烦。
所以,为了方便表示IP地址,我们就把IP地址的每一个字节上的数据换算成十进制,然后用.分开来表示:
"点分十进制"
IP地址的组成:网络号段+主机号段
A类:第一号段为网络号段+后三段的主机号段
一个网络号:256*256*256 = 16777216
B类:前二号段为网络号段+后二段的主机号段
一个网络号:256*256 = 65536
C类:前三号段为网络号段+后一段的主机号段
一个网络号:256
IP地址的分类:
A类 1.0.0.1---127.255.255.254 (1)10.X.X.X是私有地址(私有地址就是在互联网上不使用,而被用在局域网络中的地址) (2)127.X.X.X是保留地址,用做循环测试用的。
B类 128.0.0.1---191.255.255.254 172.16.0.0---172.31.255.255是私有地址。169.254.X.X是保留地址。
C类 192.0.0.1---223.255.255.254 192.168.X.X是私有地址
D类 224.0.0.1---239.255.255.254
E类 240.0.0.1---247.255.255.254
两个DOS命令:
ipconfig 查看本机ip地址
ping 后面跟ip地址。测试本机与指定的ip地址间的通信是否有问题
特殊的IP地址:
127.0.0.1 回环地址(表示本机)
x.x.x.255 广播地址
x.x.x.0 网络地址
端口号:
正在运行的程序的标识。
有效端口:0~65535,其中0~1024系统使用或保留端口。
协议:
通信的规则
UDP:
把数据打包
数据有限制
不建立连接
速度快
不可靠
TCP:
建立连接通道
数据无限制
速度慢
可靠
举例:
UDP:发短信
TCP:打电话
package cn.itcast_01;import java.net.InetAddress;import java.net.UnknownHostException;/* * 如果一个类没有构造方法: * A:成员全部是静态的(Math,Arrays,Collections) * B:单例设计模式(Runtime) * C:类中有静态方法返回该类的对象(InetAddress) * class Demo { * private Demo(){} * * public static Demo getXxx() { * return new Demo(); * } * } * * 看InetAddress的成员方法: * public static InetAddress getByName(String host):根据主机名或者IP地址的字符串表示得到IP地址对象 */public class InetAddressDemo {public static void main(String[] args) throws UnknownHostException {// public static InetAddress getByName(String host)// InetAddress address = InetAddress.getByName("liuyi");// InetAddress address = InetAddress.getByName("192.168.12.92");InetAddress address = InetAddress.getByName("192.168.12.63");// 获取两个东西:主机名,IP地址// public String getHostName()String name = address.getHostName();// public String getHostAddress()String ip = address.getHostAddress();System.out.println(name + "---" + ip);}}
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;/* * 数据来自于键盘录入 * 键盘录入数据要自己控制录入结束。 */public class SendDemo {public static void main(String[] args) throws IOException {// 创建发送端的Socket对象DatagramSocket ds = new DatagramSocket();// 封装键盘录入数据BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String line = null;while ((line = br.readLine()) != null) {if ("886".equals(line)) {break;}// 创建数据并打包byte[] bys = line.getBytes();// DatagramPacket dp = new DatagramPacket(bys, bys.length,// InetAddress.getByName("192.168.12.92"), 12345);DatagramPacket dp = new DatagramPacket(bys, bys.length,InetAddress.getByName("192.168.12.255"), 12345);// 发送数据ds.send(dp);}// 释放资源ds.close();}}
类的加载
当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。
加载
就是指将class文件读入内存,并为之创建一个Class对象。
任何类被使用时系统都会建立一个Class对象。
连接
验证 是否有正确的内部结构,并和其他类协调一致
准备 负责为类的静态成员分配内存,并设置默认初始化值
解析 将类的二进制数据中的符号引用替换为直接引用
初始化 就是我们以前讲过的初始化步骤
1:反射(理解)
(1)类的加载及类加载器
(2)反射:
通过字节码文件对象,去使用成员变量,构造方法,成员方法
(3)反射的使用
A:通过反射获取构造方法并使用
B:通过反射获取成员变量并使用
C:通过反射获取成员方法并使用
(4)反射案例
A:通过反射运行配置文件的内容
B:通过反射越过泛型检查
C:通过反射给任意的一个对象的任意的属性赋值为指定的值
(5)动态代理
2:设计模式
(1)装饰设计模式
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Scanner sc = new Scanner(System.in);
(2)模版设计模式
3:JDK新特性
(1)JDK5(掌握)
装箱和拆箱
泛型
增强for
静态导入
可变参数
枚举
(2)JDK6(了解)
(3)JDK7(理解)
二进制的表现形式
用_分隔数据
switch语句可是用字符串
泛型推断(菱形泛型)
多catch的使用
自动释放资源的用法
(4)JDK8(了解)
可以去网上了解资料
package cn.itcast_01;public abstract class Direction3 {// 创建几个实例public static final Direction3 FRONT = new Direction3("前") {@Overridepublic void show() {System.out.println("前");}};public static final Direction3 BEHIND = new Direction3("后") {@Overridepublic void show() {System.out.println("后");}};public static final Direction3 LEFT = new Direction3("左") {@Overridepublic void show() {System.out.println("左");}};public static final Direction3 RIGHT = new Direction3("右") {@Overridepublic void show() {System.out.println("右");}};// 构造私有,别人就不能无限的创建了// private Direction2() {// }// 加入成员变量,并去掉无参构造private String name;private Direction3(String name) {this.name = name;}public String getName() {return name;}// 加入抽象方法public abstract void show();}
- 【黑马程序员】网络编程与反射
- 黑马程序员-Java网络编程与反射机制小结
- 黑马程序员——GUI-网络编程-反射
- 黑马程序员_JavaSE的网络编程和反射
- 黑马程序员<Java笔记<GUI 网络编程反射>>
- 黑马程序员----GUI与网络编程
- 黑马程序员 网络编程 UDP与TCP
- 黑马程序员--Java编程--反射
- 【黑马程序员】网络编程
- 黑马程序员 网络编程
- 黑马程序员:网络编程
- 黑马程序员-------网络编程
- 黑马程序员-网络编程
- 黑马程序员:网络编程
- 黑马程序员--网络编程
- 黑马程序员--网络编程
- 黑马程序员-网络编程
- 黑马程序员-------网络编程
- Objective-C 中的NSLog
- Linux spi驱动分析(一)----总线驱动
- Golang 学习摘录(一)
- 网络字节序和主机字节序
- 【NOIP2015】总结
- 【黑马程序员】网络编程与反射
- svn忽略提交
- Retrieve Oracle password from Toad for Oracle
- Xcode7中你一定要知道的炸裂调试神技
- 微型Web框架(Ruby) Sinatra
- 股票实时数据接口 香港股市详细查询
- 【Java小项目】一个Socket连续传输多个文件
- NOIP2015总结
- 再谈给onScroll减压