Java从入门到精通2
2023-12-20 14:51:10 0 举报
AI智能生成
登录查看完整内容
个人复习内容
作者其他创作
大纲/内容
集合与数组之间的不同是:数组长度是固定的,集合长度是可变的,数组是存放基本数据的,集合是存放对象的引用
集合类概述
Collection接口是层次结构中的根接口,够成Collection的单位称为元素。Collection接口通常不直接使用,但该元素提供了添加、删除、管理数据的方法。List接口跟Set接口都继承Collection接口,所以List接口跟Set接口通用。
Collection接口常用的方法
Collection接口
底层逻辑是数组,保存所有元素。优点:查找速度快。缺点:向指定索引位置插入元素或删除对象的速度慢。
语法:List<E> list = new ArrayList<>();
ArrayList类
底层逻辑是链表结构。优点:向集合中插入或删除元素效率高。缺点:查找集合中的元素效率低
语法:List<E> list = new linkedList<>();
linkedlist类
List接口的实现类
List增加的方法
List集合
底层是由哈希表(实际是一个HashMap实例)支持。它不保证Set集合的迭代顺序,特别是它不保证该顺序恒久不变。允许使用null元素
语法:Set<> s = new HashSet<>();
HashSet类
底层是红黑树结构。不仅实现了Set集合,还实现了java.util.SortedSet接口。在遍历时按照自然顺序递增排序,也可以按照指定比较器递增排序
语法:Set<> s = new TreeSet<>();
TreeSet类
Set结口实现类
TreeSet增加的方法
Set集合
是基于哈希表的Map接口的实现。此实现提供所有可选的映射操作,允许null值和null键,必须保证键的唯一性。此类不保证映射的顺序,特别是它不保证该顺序恒久不变
语法:Map<key,value> m = new HashMap<>();
HashMap类
实现了Map接口还实现了java.util.SortedMap接口,所以集合中有一定的顺序。在添加、删除和定位方面不如HashMap类。TreeMap类不允许键对象是null值
语法:Map<key,value> m = new TreeMap<>();
TreeMap类
Map接口的实现类
Map结合没有继承Collection接口,其提供的是key到value的映射。Map集合中不能有相同的key,每个key只能映射一个value。key还决定了存储对象在映射中的存储位置,但不是由key对象本身决定的,而是通过一种“散列技术”进行处理,产生一个散列码的数值。
Map接口
Map增加的方法
Map集合
集合类
常用方法
枚举可以看做一种封装在类或者接口中的常量,本质还是以类的形式存在
枚举类型
泛型是程序员定义的安全类型
泛型使用方法:类名<泛型名>
在定义泛型类时可以声明多个类型
定义泛型类时可以声明数组类型
泛型常规用法
语法:class 类名 <T extends 类名或者接口名>
限制泛型可用类型
语法:泛型类名称<? extends List> a = null;
使用类型通配符
span style=\"font-size:inherit;\
继承泛型类与实现泛型接口
泛型高级用法
泛型的类型参数只能是类类型,不可以是简单类型,如A<int>这种泛型定义的就是错误的
泛型的类型个数可以是多个
可以使用extends关键字限制泛型的类型
可以使用通配符限制泛型的类型
总结
泛型
枚举与泛型
lambda表达式的作用是补全方法体,用少量的代码实现抽象方法
语法:() -> {} 意思是:这个方法按照这个代码块来执行
lambda表达式
符号:\"::\"
它可以引用静态方法、成员方法、带泛型的方法
语法:类名::方法名
语法:类名::new
引用构造方法
T:被操作的类型,可以理解为方法参数类型 R:操作结果类型,可以理解为方法的返回类型
Function接口方法
方法的引用
类似数据库的SQL语句,可以执行非常复杂的过滤、映射、查找和收集功能。且代码量少,缺点:可读性不高
流处理的接口都定义在java.uil.stream包下。BaseStream接口才是最基础的接口,但最常用的是BaseStream接口的一个子接口----Stream接口
Stream接口
此类像是一个容器,可保存任何对象。此类是用final修饰的,所以不能有子类。Optional类带有泛型,所有能保存任何对象的值
Option类
Collectors类为收集器类,该类实现了java.util.Collector接口,可以将Stream流对象进行各种各样的封装、归集、分组等操作
Collectors类
数据过滤就是在杂乱的数据中筛选出需要的数据,给出一定条件,将符合的条件数据过滤并展示出来
filter()方法是Stream接口提供的过滤方法,该方法可以将lambda表达式作为参数,然后按照lambda表达式的逻辑过滤流中的元素。过滤出想要的流元素后,还要使用Stream提供的 collect()方法按照指定的方法重新封装
filter()方法
distinct()方法是Stream接口提供的过滤方法该方法可以去除流中重复的元素,效果跟SQL语句中的DISTINCT关键字一样
distinct()方法
limit()方法是Stream接口提供的方法,该方法可以获取流中前n个元素
limit()方法
skip()方法是Stream接口提供的方法,该方法可以忽略流中的前n个元素
skip()方法
数据过滤
数据映射和过滤的概念不同,过滤是在流中找到符合条件的元素,映射是在流中获得具体的数据Stream接口提供了 map()方法用来实现数据映射,map()方法会按照参数中的函数逻辑获取新的流对象,新的流对象中元素类型可能与旧流对象元素类型不相同。
数据映射
数据查找是判断流中是否有符合条件的数据,查找的结果是一个Boolean值或者Optional类的对象
allMatch()方法是Stream接口提供的方法,该方法会判断流中的元素是否全部符合某一条件,返回结果是Boolean值。如果所有元素条件符合则返回true,否则返回false
allMatch方法()
anyMatch()方法是Stream接口提供的方法,该方法会判断流中元素是否符合某一条件,只要有一个元素符合条件就返回true,如果没有符合条件的元素才会返回false
anyMatch()方法
noneMatch()方法是Stream接口提供的方法,该方法会判断流中的所有元素是否都不符合某一条件,此方法逻辑刚好与allMatch()方法正好相反
noneMatch()方法
findFirst()方法方法是Stream接口提供的方法,该方法会返回符合条件的第一个元素
findFirst()方法
数据查找
数据收集可以理解为高级的“数据过滤+数据映射”,是对数据的深加工。数据统计:可以筛选出特殊元素,还可以对元素的属性进行统计计算。这种复杂的统计操作不是由Stream实现的,而是由Collectors收集器类实现的,收集器提供了非常丰富的API,有着强大的数据挖掘能力
数据收集
一级分组:将所有数据按照一个条件进行归类,跟一维数组相似 例:学校有100个学生,条件就是按年级分组,直接将学生归类到相应的年级中,然后就不在细分了
Collectors 类提供的 groupingBy()方法就是用来进行分组的方法,方法参数是一个 Function 接口对象,收集器会按照指定的函数规则对数组进行分组
多级分组:将所有条件对照多个条件进行分组,跟二位数组相似 例:学校有100个学生,条件就是按年级班级分组,将相应的学生归类到年纪之后再细分班级。
数据分组就是将流中元素按照指定的条件分开保存,分组之后的数据会按照不同的标签分别保存成一个集合,然后按照“键-值”关系封存在Map对象中数据分组有:一级分组、多级分组两种场景
数据分组
流处理
lambda表达式与流处理
流是一组有序的数据序列,根据操作类型分为输入流和输出流两种输出流是指数据要到达目的地,程序通过向输出流中写入数据把信息传递到目的地
InputStream类是字节输入流的抽象类,是所有字节输入流的父类
输入流一些方法
输入流
OutputStream类是字节输出流的抽象类,此类是表示输出字节流的所有类的超类
输出流方法
输出流
输入输出流
File类是Java.io包中唯一代表磁盘文件本身的类
语法:File 对象名 = new File(文件地址)
file类
程序运行期间,大部分数据都在内存中进行操作,当程序结束或关闭时,这些数据将消失,如果需要将数据永久存储,可使用文件输入输出流与指定文件建立连接,将需要的数据永久保存
文件输入流:FileInputStream
文件输出流:FileOutputStre
语法:字节输出/输入流 对象名 = new 字节输出/输入流(file类对象名)
文件输入输出流
缓存时I/O流的一种性能优化,缓存流为I/O流增加了内存缓存区,使得在流上执行skip()、mark()和reset()方法都成为可能
带缓存输入流:BufferdReader
带缓存输入流:BufferdWriter
语法:带缓存输入流/输出流 对象名 = new 带缓存输入流/输出流(输入流/输出流对象名)
带缓存输入输出流
数据输入/输出流允许应用程序以与机器无关的方式从底层输入流中读取基本Java基础类型,也就是说,数据流不在关心这个数值是什么类型了
数据输入流:DateInputStream
数据输出流:DateOutputStream
语法:文件数据输入/输出流 对象名 = new 文件数据输入/输出流(文件类对象) 数据输入/输出流 对象 名 = new 数据输入/输出流(文件数据输入/输出流对象)
数据输入输出流
I/O(输入输出流)
通过java反射机制,可以在程序中访问已经装载到JVM中的java对象描述,实现访问、检测和修改描述java对象本身信息功能
语法:第一种Class 反射名 = 对象名.getClass();第二种Class 反射名 = 类名.class第三种Class 反射名 = Class.forName(\"路径.类名\")
访问的主要信息
常用的方法
反射
java中提供了Anno注解功能,该功能用于类、构造方法、成员变量、成员方法、参数等的声明中,该功能并不影响程序运行,但是会对编译器警告等辅助工具产生影响
定义:关键字:interface跟接口定义一样,但是要在关键字前添加一个“@”符
语法:public @interface 注解名{}
@Overr:限定重写父类方法,作用范围:成员方法
@SuppressWarning:抑制编译器警告,作用范围:类、成员属性、成员方法
@Deprecated:标示已过时,作用范围:类、成员属性、成员方法
内置注解
用法:在类上方填写注解名
给注解成员定义默认值,关键字:default语法:int i() default 80; 此时i已经被设定为了80
@Target:给注解注解,限定注解使用
自定义注解
Annotation注解功能
反射与注解
语法:DriverManager.registerDriver(new Driver());
注册驱动
语法:connection = DriverManager.getConnection (\"jdbc:mysql://localhost:3306/school_java\
获取连接
语法:PreparedStatement preparedStatement = connection.prepareStatement(\"SQL语句\")
获取statement对象
语法:ResultSet resultset = preparedStatement.executeQuery();
执行SQL语句返回结果集
语法:while(resultset.next()) { //next:判断是否有下一条数据 System.out.println(resultset.getInt(\"id\")); //数据库里什么字段,get方法就填什么类型 System.out.println(resultset.getString(\"name\")); }
遍历结果集
语法:某方法/某数据.close();
关闭连接释放资源
数据库操作
语法:JFrame jf = new JFrame(“窗体名称”); Container container = jf.getContentPane();//此方法是将窗体转换为容器
创建方法:public JFrame():创建一个初始不可见、没有标题的窗体。public JFrame(String title):创建一个不可见、具有标题的窗体。
添加按钮:JButton okBtn= new JButton(“确定“) container.add(okBtn);
添加组件方法:容器名.add(组件名)
语法:container.remove(okBtn);
删除组件:容器名.remove(组件名)
关闭窗体的方法
窗体一些常用的方法:
JFrame窗体
创建方法:public JDialogO:创建一个没有标题和父窗体的对话框。public JDialog(Frame f):创建一个没有标题,但指定父窗体的对话框。span style=\"font-size: inherit;\
JDialog对话框
创建方法:
JOptionPane小型对话框
Swing常用窗体
绝对布局
alignment参数表示为每一行组件排列方式有以下值
FlowLayout流布局管理器
边界布局划分为:东南西北中5个区域
BorderLayout边界布局管理器
把容器划分为网格,组件能够按行、列来排列
GridLayout网格布局管理器
常用布局管理器
JPanel面板必须在窗体容器中使用,无法脱离窗体显示
JPanel面板
JScrollPane 滚动面板 不能使用布局管理器,且只能容纳一个组件
JScrollPane滚动面板
常用面板
JLable 标签
public ImagelconO:创建一个 Imagelcon 对象,创建 ImageIcon对象后,使用其调用 setImage(Image image)方法设置图片。public Imagelcon(Image image):依据现有的图片创建图标。public ImageIcon(URL url):依据现有图片的路径创建图标。
使用javax.swing.Imagelcon类可以依据现有的图片创建图标。ImageIcon类实现了Icon接口,它有多个构造方法
图标的使用
文字标签组件与图标
常用的构造方法如下:public JButtonO:创建一个不带文本或图标的按钮。public JButton(String text):创建一个带文本的按钮。public JButton(Icon icon):创建一个带图标的按钮。span style=\"font-size: inherit;\
常用方法:
JButton 按钮
创建JRadioButton 对象需要使用JRadioButton 类的构造方法
按钮组
JRadinButton 单选按钮
JCheckBox复选框
按钮组件
类的常用构造方法如下:public JComboBox(ComboBoxModeldataModel):创建一个 JComboBox对象,下拉列表中的列表项使用ComboBoxModel中的列表项,ComboBoxModel 是一个用于组合框的数据模型。public JComboBox(Object[]arrayData):创建一个包含指定数组中的元素的JComboBox对象。public JComboBox(Vector vector):创建一个包含指定 Vector 对象中的元素的JComboBox 对象.Voetor对象中的元素可以通过整数索引进行访问,而且 Vector 对象中的元素可以根据需求被添加或者移除。
JComboBox 下拉列表框
指定文本框设置文本内容:文本框名.setText(String t)
JTextField文本框
改变密码框的回显字符:框名.setEchoChar(char c)
JPasswordField 密码框
JTextArea 文本域
列表组件
创建表格
DefaultTableModel类提供的常用构造方法
DefaultTableModel 表格数据模型
文本组件
ActionEvent()监听器是Swing中比较常用的事件监听器,很多组件的动作都会使用它监听
ActionEvent 动作事件
当向文本框中输入内容时,将发生键盘事件。KeyEvent类负责捕获键盘事件,可以通过为组件添加实现了KeyListener接口的监听器类来处理相应的键盘事件
public void keyTyped(KeyEvent e); //发生击键事件时被触发public void keyPressed(KeyEvent e); //按键被按下时被触发public void keyReleased(KeyEvent e); //按键被释放时被触发
KeyListener接口共有三个抽象方法
KeyEvent 键盘事件
所有组件都能发生鼠标事件,MouseEvent类负责捕获鼠标事件,可以通过为组件添加实现MouseListener接口的监听器来处理相应的鼠标事件。
public void mouseEntered(MouseEvent e); //光标移入组件时被触发public void mousePressed(MouseEvent e); //鼠标按键被按下时被触发public void mouseReleased(MouseEvent e); //鼠标按键被释放时被触发public void mouseClicked(MouseEvent e); //发生单击事件时被触发public void mouseExited(MouseEvent e); //光标移出组件时被触发
代表鼠标的值
MouseEvent 鼠标事件
事件监听器
Swing程序设计
Graphics类是所有图形上下文的抽象基本类,它允许应用程序在组件以及闭屏图像上进行绘制,它封装了Java支持的基本绘图操作所需的状态信息,主要包括颜色、字体、画笔、文本、图像等,它还提供了常用的绘图方法,利用这些方法可以使直线、矩形、多边形、椭圆、圆弧等形状和文本、图片的绘制操作
Graphics类
语法:public void paint(Graphics g){Graphics2D g1 = (Graphics2D)g;}
Graphics2D类
Java绘图类
语法:g1.draw(对象名)g1.fill(对象名)
java.awt.geom 包中提供了如下常用的图形类,这些图形类都实现了Shape 接口:Arc2D类CubicCurve2D类Ellipse2D类Line2D类Point2D类QuadCurve2D类Rectangle2D类RoundRectangle2D类
要绘制指定形状的图形,需要创建并实例化该类的图形对象,且这些图形类必须是Shape接口的实现类,然后使用Graphics2D类的draw()方法绘制该图形对象或者使用fill()方法填充该图形对象
Graphics2D类是在继承Graphics 类的基础上编写的,它包含了Graphics类的绘图方法并添加了更强的功能,在创建绘图类时推荐使用该类。Graphics2D类可以分别使用不同的类来表示不同的形状,Line2D类、Rectangle2D类等
绘制图形
语法1:Color 对象名 = new Color(int r,int g,int b)语法2:Color 对象名 = new Color(int rgb)
Graphics2D g2 =(Graphics2D) g;g2.setColo(Color.RED);
绘图类可以使用setColor()方法设置颜色语法setColor(Color 颜色)
使用Color类可以创建任意颜色的对象,不用担心平台是否支持该颜色,因为Java以跨平台和与硬件无关的方式支持颜色管理
设置颜色, Color类
构造方法参数图
语法1:setStroke(Stroke stroke)stroke是指Stroke接口的实现类对象
语法2:BasicStroke(宽 cap join)cap参数有:CAP_BUTT、CAP_ROUND、CAP_SQUAREjoin参数有:JOIN_MITER、JOIN_ROUND、JOIN_BEVEL
Graphics2D类可以调用setStroke()方法设置画笔的属性,如改变线条粗细、虚实、形状、风格等
设置画笔
绘图颜色与画笔属性
语法:Font font = new Font(name style size)对象名.setFont(font)
Java使用了Font类封装了字体的大小、样式等属性,该类在java.awt包中定义,其构造方法可以指定字体的名称、大小、样式3个属性
设置字体
语法1:对象名.drawString(String str,int x,int y)语法2:对象名.drawString(String str,float x,float y)
Graphics2D类提供了drawString()方法,使用该方法可以实现图形上下文的文本绘制,从而实现在图片上显示文字的功能
显示文字
绘制文本
语法:g1.drawImage(Image img,int x,inty,ImageObserver observer)
使用drawImage()方法将图片资源显示到绘图上下文中,而且可以实现各种特效处理,图片的缩放、翻转等。
显示图片
语法:g1.drawImage(Image img,int x,int y,int width,int height,ImageObserver observer)img:图片对象x:水平位置y:垂直位置width:图片新的宽度属性height:图片新的高度属性observer:要通知的图像观察者repaint()方法会自动调研费paint()方法,实现组件或画板的重画功能,类似界面刷新
放大与缩小
此方法总是用非缩放的图像来呈现缩放的矩形,并动态地执行所需要的缩放。此操作不使用缓存的缩放图像。执行图像从源到目标的缩放,要将源矩形的第一个坐标映射到目标矩形的第一个坐标,源矩形的第二个坐标映射到目标矩形的第二个坐标,按需要缩放和翻转子图像
语法:g1.drawImage(Image img,int dx1,int dy1,int dx2,int dy2,int sx1,int sy1,int sx2,intsy2,ImageObserver observer)
图像翻转
语法:g1.rotate(Math.toRadians())Math.toRadians():角度转弧度
图像旋转需要调用Graphics2D类的rotate()方法,该方法将根据指定的弧度旋转图像
图像旋转
语法:shear(double shx,double shy)
使用Graphics2D类提供的shear()方法设置绘图的倾斜方向,从而使图像实现倾斜效果
图像倾斜
图像处理
Java绘图
Thread常用的两个构造方法语法:public Thread();public Thread(String threadName);
继承Thread类创建新线程语法:public class ThreadTest extend Thread{}
语法:public void run(){}
完成线程功能的代码放在类的run()方法中,当类继承Thread类后,就要在类中覆盖run()方法,将实现该线程功能代码写入,然后调用Thread类中的start()方法执行
继承Thread类
语法:public class 类名 implements Runnable{}
实现Runnable接口的程序会创建一个Thread对象,并将Runnable对象与Thread对象相关联。类中有两个构造方法public 类名(Runnable target)public 类名(Runnable target,String name)这两个构造方法的参数都有Runnable实例,使用以上构造方法就可以将Runnable实例与Thread实例相关联
如果需要继承其他类而且要实现多线程,那么就可以通过Runnable接口来实现
1.建立Runnable对象2.使用参数为Runnable对象的构造方法创建Thread实例3.调用start()方法启动线程
实现Runnable接口创建线程的流程
使用Runnable接口创建新线程步骤
实现Runnable 接口
创建线程
周期图
线程的生命周期
语法:Thread.sleep(2000);
一种控制线程行为方法是调用sleep()方法,sleep()方法需要一个参数来指定该线程休眠时间,以毫秒为单位
线程的休眠
jion()方法。当某个线程使用该方法加入另外一个线程时,另一个线程会等该线程执行完毕后再继续执行
线程的加入
Thread 类中提供了一种礼让方法,使用yield()方法表示,它只是给当前正处于运行状态的线程个提醒,告知它可以将资源礼让给其他线程,但这仅是一种暗示,没有任何一种机制保证当前线程会将资源礼让。yield()方法使具有同样优先级的线程有进入可执行状态的机会,在当前线程放弃执行权时会再度回到就绪状体。对于支持多任务的操作系统来说,不需要调用yield()方法,因为操作系统会为线程自动分配CPU时间片来执行
线程的礼让
如果线程是因为使用了slcep()或wait()方法进入了就绪状态,可以使用Thread 类中 interrupt()方法使线程离开run()方法,同时结束线程,但程序会抛出InterruptedException异常,用户可以在处理该异常时完成线程的中断业务处理,如终止while循环。
线程的中断
操作线程的方法
每个线程都具有各自的优先级,线程的优先级可以表明在程序中该线程的重要性,如果有很多线程处于就绪状态,系统会根据优先级来决定首先使哪个线程进入运行状态。
Thread类中包含的成员变量代表了线程的某些优先级,如Thread.MIN_PRIORITY(常数1)、Thread.MAXPRIORITY(常数10)、Thread.NORM PRIORITY(常数5)。其中,每个线程的优先级都在 Thread.MIN_PRIORITY~Thread.MAX_PRIORITY,在默认情况下其优先级都是Thread.NORM PRIORITY。每个新产生的线程都继承了父线程的优先级
优先级为5的线程A首先得到CPU时间片;当该时间结束后,轮换到与线程A相同优先级的线程B;当线程 B的运行时间结束后,会继续轮换到线程A,直到线程A与线程B都执行完毕,才会轮换到线程C;当线程C结束后,才会轮换到线程D。
线程的优先级可以使用 setPriority()方法调整,如果使用该方法设置的优先级不在1~10,将产生IllegalArgumentException异常。
线程的优先级
语法:synchronized(Object) {}
Java 中提供了同步机制,可以有效地防止资源冲突。同步机制使用synchronized关键字,使用该关键字包含的代码块称为同步块,也称为临界区
同步块
语法:synchronized void f(){}
同步方法
线程同步
多线程
IP是Internet Protocol的简称,是一种网络协议。Internet 网络采用的协议是TCP/IP协议,其全称是Transmission Control Protocol/Internet Protocol。Internet 依靠TCP/IP协议,在全球范围内实现了不同硬件结构、不同操作系统、不同网络系统间的互联。在Internet 网络上存在着数以亿计的主机,每台主机都用网络为其分配的 Internet 地址代表自己,这个地址就是I地址。到目前为止,I地址用4个字节,也就是32位的二进制数来表示,称为IPv4。为了便于使用,通常取用每个字节的十进制数,并且每个字节之间用圆点隔开来表示I地址,如192.168.1.1。现在人们正在试验使用16个字节来表示I地址,这就是IPv6,但IPv6还没有投入使用。TCP/IP 模式是一种层次结构,共分为4层,分别为应用层、传输层、互联网层和网络层。各层实现特定的功能,提供特定的服务和访问接口,并具有相对的独立性
IP协议
在TCPAIP 协议栈中,有两个高级协议是网络应用程序编写者应该了解的,即传输控制协议(Transmission Control Protocol,TCP)与用户数据报协议(User Datagram Protocol, UDP)。
TCP 协议是一种以固接连线为基础的协议,它提供两台计算机间可靠的数据传送。TCP可以保证数据从一端送至连接的另一端时,能够确实送达,而且抵达的数据的排列顺序和送出时的顺序相同。因此,TCP协议适合可靠性要求比较高的场合。就像拨打电话,必须先拨号给对方,等两端确定连接后,相互才能听到对方说话,也知道对方回应的是什么。
HTTP、FTP 和Telnet 等都需要使用可靠的通信频道。例如,HTTP从某个URL读取数据时,如果收到的数据顺序与发送时不相同,可能就会出现一个混乱的HTML文件或是一些无效的信息。
UDP是无连接通信协议,不保证数据的可靠传输,但能够向若干个目标发送数据,或接收来自若干个源的数据。UDP以独立发送数据包的方式进行。这种方式就像邮递员送信给收信人,可以寄出很多信给同一个人,且每一封信都是相对独立的,各封信送达的顺序并不重要,收信人接收信件的顺序也不能保证与寄出信件的顺序相同。
UDP 协议适合于一些对数据准确性要求不高,但对传输速度和时效性要求非常高的网站,如网络聊天室、在线影片等。这是由于TCP协议在认证上存在额外耗费,可能使传输速度减慢,而UDP协议即使有一小部分数据包遗失或传送顺序有所不同,也不会严重危害该项通信。
TCP与UDP协议
网络协议
通常,0~1023的端口数用于一些知名的网络服务和应用,用户的普通网络应用程序应该使用1024以上的端口数,以避免端口号与另一个应用或系统服务所用端口冲突。
网络程序中的套接字(Socket)用于将应用程序与端口连接起来。套接字是一个假想的连接装置,就像插座一样可连接电器与电线
端口与套接字
服务器端与客户端的交互过程
服务器程序创建一个 ServerSocket(服务器端套接字)对象,调用accept0方法等待客户机来连接客户端程序创建一个Socket对象,请求与服务器建立连接服务器接收客户机的连接请求,同时创建一个新的Socket 对象与客户建立连接。随后服务器继续等待新的请求
TCP网络程序设计是指利用Socket 类编写通信程序。利用TCP协议进行通信的两个应用程序是有主次之分的,一个称为服务器程序,另一个称为客户机程序,两者的功能和编写方法大不一样。
java.net包中的InetAddress类是与IP地址相关的类,利用该类可以获取IP地址、主机地址等信息。
InetAddress 类
ServerSocket 类
TCP程序
基于 UDP通信的基本模式:1..将数据打包(称为数据包),然后将数据包发往目的地。2.接收别人发来的数据包,然后查看数据包。
java.net 包的DatagramPacket 类用来表示数据包。
DatagramPacket类
DatagramSocker类
UDP程序
网络通信
Java从入门到精通2
收藏
收藏
0 条评论
回复 删除
下一页