【黑马程序员】网络编程与反射

原创 2015年11月17日 18:06:11
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("前") {
		@Override
		public void show() {
			System.out.println("前");
		}

	};
	public static final Direction3 BEHIND = new Direction3("后") {
		@Override
		public void show() {
			System.out.println("后");
		}

	};
	public static final Direction3 LEFT = new Direction3("左") {
		@Override
		public void show() {
			System.out.println("左");
		}

	};
	public static final Direction3 RIGHT = new Direction3("右") {
		@Override
		public 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();
}



 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

黑马程序员——网络编程、GUI、反射 笔记第十四篇

网络编程 1 基本知识 网络编程解决的问题:计算机与计算机之间的通讯问题。 计算机网络:将分布在不同地域的计算机通过外置设备链接起来,计算机之间达到了消息交互、文件传输的功能。   计算机网...

黑马程序员《java基础总结(十六)》(网络编程<反射、正则表达式>)

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------  反射技术:其实就...

黑马程序员——基础学习(十五)网络编程及反射相关知识点

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 网络编程 网络编程 通过编程语言来实现计算机间的数据共享和数据传递 网络...

黑马程序员 + 第23天 网络编程

------- android培训、java培训、期待与您交流! ---------- day23  网络编程 1、网络模型:OSI参考模型、TCP/IP参考模型。 2、网络通讯...
  • tcgwl
  • tcgwl
  • 2013-03-24 19:33
  • 427

黑马程序员_JAVA学习之网络编程

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

黑马程序员 网络编程

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- Socket   套接字...

“黑马程序员”网络编程

------ http://www.itheima.com" target="blank">android培训、http://www.itheima.com" 网络编程: 1.找到对方IP ...

黑马程序员--网络编程

协议:规定了通信双方应该怎样通信。 HTTP-----应用层协议 TCP IP UDP SMTP POP3 --------------------- TCP HTTP协议是基于TC...

黑马程序员---网络编程(TCP传输 二)

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-客户端并发访问服务器 为了让多个客户端并发访问服务器,服务器端需要将每个客户端封装在一个单独线程中,这样服务器端...

黑马程序员Java学习笔记之网络编程

一、网络:将不同区域的计算机连接到一起(局域网、城域网、互联网) 二、地址:IP地址,确定网络上的绝对位置          相关Java类: InetAddress         操作方法: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)