java基础

     2022-03-30     316

关键词:

(一)TCP编程
(1)TCP(建立连接通道)编程的客户端的开发步骤

  1)创建客户端的Socket对象
Socket:就是客户端的Socket
    构造方法
        public Socket(InetAddress address, int port)
        public Socket(String host, int port):创建客户端套接字对象,并且指定端口号和ip文本形式

2)获取通道内的输出流对象
3)给服务器端写数据
4)释放资源
java.net.ConnectException: Connection refused: connect 连接被拒绝
不要先运行客户端,客户端的连接需要服务器监听到才能连接
5)方法

  • public Socket(String host, int port) 创建客户端的Socket对象
  • public OutputStream getOutputStream():获取套接字 的输出流
    (2)服务端的开发步骤:
  • 1)创建服务器端的Socket对象
  • 2)监听客户端的连接(阻塞方法)
  • 3)获取通道内的输入流
  • 4)读取数据,显示控制台
  • 5)释放资源
  • java.net.BindException: Address already in use: JVM_Bind 地址被绑定,因为已经有服务器在监听客户端连接
    6)方法
  • public ServerSocket(int port) throws IOException创建绑定到特定端口的服务器套接字

监听客户端的连接(阻塞方法)

  • public Socket accept(): throws IOException侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞
  • InputStream getInputStream() 获取通道内的输入流
  • 获取ip文本形式‘ :public InetAddress getInetAddress()
  • 服务端不可关闭
    例:客户端读取当前项目下的某个文本文件,服务器复制这个文件内容输出一个新的文本文件(Copy.java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

//客户端读取当前项目下的某个文本文件,服务器复制这个文件内容输出一个新的文本文件(Copy.java)
/**

  • 按照正常的思路,加入了服务器端反馈操作,发现服务器端的反馈数据,客户端并没有收到,客户端也没有结束,再等待服务器发送
  • 在客户端这边,如果SendDemo.java如果读完了,服务器端那边并不知道是否读完(流是不能使用null作为信息结束条件的,但是客户端文本文件是可以用null作为信息结束条件的)
  • 服务器等待客户端通知文本已经读完了,而客户端还需要服务器端反馈
  • 解决方案:
  • 1)客户端这边,写一个结束条件,---->服务器如果读取到了这个结束条件的话,服务器就可以反馈
  • 第一种方式虽然可以解决这种问题,不好,不灵活!
  • 2)public void shutdownOutput():通知服务器端(我没有数据了,你赶紧反馈)

  • */
    public class UploadClient {

    public static void main(String[] args) throws IOException {

    //创建客户端的Socket对象
    Socket s = new Socket("192.168.10.1",11111); //当前对象创建之后,就会和服务器端建立连接通道
    
    //封装文本文件
    BufferedReader br = new BufferedReader(
            new FileReader("SendDemo.java")) ;
    
    //封装通道内的流
    BufferedWriter bw = new BufferedWriter(
            new OutputStreamWriter(s.getOutputStream())) ;
    //读写操作
    String line =null;
    while((line=br.readLine())!=null) {
        bw.write(line);
        bw.newLine();
        bw.flush();
    }
    
    //自定义的结束条件
    /*bw.write("over");
    bw.newLine();
    bw.flush();*/
    
    //通知服务器端,客户端的文件已经完了,赶紧给反馈
    //public void shutdownOutput():
    s.shutdownOutput(); 
    
    //获取服务器反馈的数据
    //获取通道内的字符输入流
    BufferedReader brClient = new BufferedReader(
            new InputStreamReader(s.getInputStream())) ;
    String client = brClient.readLine() ;
    System.out.println(client);
    
    //释放资源
    br.close();
    s.close();

    }
    }
    服务端:
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.ServerSocket;
    import java.net.Socket;

//客户端将文本文件中的数据,复制到服务器端输出的新的java文件中,然后服务器端要给客户端反馈数据,客户端将反馈的数据展示
public class UploadServer {

public static void main(String[] args) throws IOException {

    //服务器端的Socket对象
    ServerSocket ss = new ServerSocket(11111) ;

    //监听
    Socket s = ss.accept() ;//阻塞

    //封装通道内的流
    BufferedReader br = new BufferedReader(
            new InputStreamReader(s.getInputStream())) ;

    //封装最终要输出的文本文件
    BufferedWriter bw= new BufferedWriter(new FileWriter("Copy.java")) ;

    String line = null ;

    while((line=br.readLine())!=null) {  //阻塞  //通道内的流结束不是用null作为结束条件的

        bw.write(line);
        bw.newLine();
        bw.flush();

    }

    //服务端获取通道内的输出流对象
    BufferedWriter bwServer = new BufferedWriter(
            new OutputStreamWriter(s.getOutputStream())) ;
    //向客户端反馈
    bwServer.write("文件上传成功了");
    bwServer.newLine(); 
    bwServer.flush();

    //释放资源
    bw.close();
    s.close();
}

}
(二)反射
(1)什么是反射:

  • 反射就是通过获取class字节码文件对象/Class的类对象,
  • 获取该字节码文件对象中的成员变量,构造方法,和成员方法
  • Field: 简称成员变量 (Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。
  • 反射的字段可能是一个类(静态)字段或实例字段。)
    Constructor:简称构造方法:提供关于类的单个构造方法的信息以及对它的访问权限。
    Method:简称成员方法:类或接口上单独某个方法(以及如何访问该方法)的信息
    (2)获取字节码文件
    参数:类路径:包名.类名
    Class c = Class.forName("类路径:包名.类名");
    (3)方法
  • public Constructor<?>[] getConstructors():Class 对象所表示的类的所有公共构造方法
  • public Constructor<?>[] getDeclaredConstructors():获取当前字节码文件对象中的所有的构造方法
  • 如何获取单个的构造方法
  • public Constructor<T> getConstructor(Class<?>... parameterTypes)
    //如果是无参的,不用写;如果是有参的,getContStructor方法中的参数是当前参数类型的静态属性class
  • 获取当前构造的对象; public T newInstance(Object... initargs):initrgs:实际参数
  • 现在获取的那个构造方法是私有的:public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
  • public void setAccessible(boolean flag):值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查
    异常: java.lang.IllegalAccessException: Class org.westos_02.ReflectDemo3 can not access a member of class org.westos_01.Person with modifiers "private at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
  • public Field[] getDeclaredFields():获取当前字节码文件对象中所有的字段
  • public Field[] getFields():获取的是公共的字段
  • public void set(Object obj,Object value)
    参数1:表示给哪个对象设置当前字段的值
    参数2:表示给当前获取的哪个Field对象的字段设置一个新的值
    java.lang.NoSuchFieldException: name
    name是私有的,必须指定方法获取
  • public Field getDeclaredField(String name):指定的字段
  • 获取当前字节码文件对象中的所有的公共的成员方法(包括父类中的):public Method[] getMethods()
  • public Method[] getDeclaredMethods():所有的成员方法
  • 获取单个的成员方法,Method
    public Method getMethod(String name, Class<?>... parameterTypes)
    参数1: 表示方法名
    参数2:表示当前方法的参数数据类型的静态class属性
  • public Object invoke(Object obj, Object... args)
    参数1:指定的哪个对象上调用底层invoke(),
    参数2:表示的调用那个方法所传递的实际参数

重学java基础第二十三课:java基础注释

    查看详情

java入门-语言基础-03.基础语法

...00.net/training/java-basic-syntax.html更多教程:光束云-免费课程基础语法序号文内章节视频1第一个Java程序-2基本语法-3Java标识符-4Java修饰符-5Java变量-6Java数组-7Java枚举-8Java关键字-9Java注释-10Java空行-11继承-12接口-13Java源程序与编译型运... 查看详情

java入门笔记1——基础概念和基础语法

参考书:《Java语言程序设计与数据结构(基础篇)》——梁勇文章目录​​一、基础概念​​​​1.Java语言规范、JDK、JRE、JVM、IDE​​​​2.Java的加载与执行​​​​3.java中的源文件名、类名和main方法​​​​4.关于packet​​... 查看详情

java基础|debug模式及基础练习

⭐本专栏旨在对JAVA的基础语法及知识点进行全面且详细的讲解,完成从0到1的java学习,面向零基础及入门的学习者,通过专栏的学习可以熟练掌握JAVA编程,同时为后续的框架学习,进阶开发的代码能力打下坚实的基础。 查看详情

零基础学java—java基础知识

【零基础学Java】—Java基础知识(四)👏芳华正茂始少年👏👏时光正好👏👏👏未来可期一、Java转义字符publicclassChange publicstaticvoidmain(String[]args) //制表位\t实现对齐功能System.out.println 查看详情

java基础面试java基础问题

Java基础问题1.==和equals的区别是什么?2.两个对象的hashCode()相同,则equals()也一定为true,对吗?3.final在java中有什么作用?4.String属于基础的数据类型吗?5.Java中操作字符串都有哪些类?它们之间... 查看详情

java基础(十五):异常处理(代码片段)

Java基础系列文章Java基础(一):语言概述Java基础(二):原码、反码、补码及进制之间的运算Java基础(三):数据类型与进制Java基础(四):逻辑运算符和位运算符Java基础(五):流程控制语句Java基础(六):数组Java... 查看详情

零基础学java步骤有哪些?

零基础学Java步骤有哪些?对于零基础的学员来说,如何从基础开始逐渐深入学习,最后成为一名合格的Java开发人员非常重要,下面就给大家罗列一下学习步骤:  第一阶段:Java基础以及Web开发基础—小程序项目阶段,让学员... 查看详情

java基础:java基础之三大特性

我是ABin-阿斌:写一生代码,创一世佳话,筑一览芳华。如果小伙伴们觉得不错就一键三连吧~点击此处跳转:Java三大特性:封装,继承与多态 查看详情

java基础:java基础之三大特性

我是ABin-阿斌:写一生代码,创一世佳话,筑一览芳华。如果小伙伴们觉得不错就一键三连吧~点击此处跳转:Java三大特性:封装,继承与多态 查看详情

java基础|基础语法之运算输入与控制语句

⭐本专栏旨在对JAVA的基础语法及知识点进行全面且详细的讲解,完成从0到1的java学习,面向零基础及入门的学习者,通过专栏的学习可以熟练掌握JAVA编程,同时为后续的框架学习,进阶开发的代码能力打下坚实的基础。 查看详情

java基础java基础语法

一、内容注释关键字标识符常量、进制和进制转换变量数据类型和类型转换运算符语句 二、注释注释概述用于解释说明程序的文字Java中注释分类格式单行注释格式://注释文字多行注释格式:/*注释文字*/文档注释格式:/**... 查看详情

java基础

Java基础内容 a.Java程序入门 b.Java中的变量和表达式 c.Java中的控制流语句 d.Java中的数组 e.常用算法Java程序入门: 1.Java的组成 a.Java语言 b.Java虚拟机(JVM:JavaVirtualMachine) c.Java应用程序编程接口(JavaAPI:JavaApplicationProgrammingInterfa... 查看详情

零基础如何迅速学好java

  对于零基础的朋友来说,能够迅速的学好Java,那将是一件特别有成就感,也特别有快感的事情,但是零基础如何迅速学好Java?这就是零基础朋友特别苦恼的问题,你在学Java的时候有什么秘招可以分享吗?今天长沙尚学堂小编... 查看详情

java基础

java基础基本数据类型byte/8----------------------->Bytechar/16---------------------->Charactershort/16--------------------->Short(java8中缓存池的默认大小-128~127)int/32------------------------>Integer(java8 查看详情

java基础-基础语法

一.标识符  java中对各种变量、方法和类等要素命名的时候使用的字符序列称为标识符。  java中标识符的命名规则:1.由字母、数字、下划线(_)以及美元符号($)组成              2.标识符应该以字母或者下... 查看详情

java基础

  对于JAVA基础的开始,JAVA基础是对以后开发的这个大工程进行的一个打地基的过程,也是最总要的一个过程,学习JAVA基础的一天就是对JAVA的一个基础认识,让我们对JAVA最基本的语句了解,什么是主函数,什么是数据,什么... 查看详情

第3篇-java基础

第3篇-JAVA基础每篇一句 :目标是给梦想一个期限,行动与坚持就是实现梦想的过程初学心得:遇到困难或问题,它不是休止符,而是引向你如何解决问题的标识(笔者:JEEP/711)[JAVA笔记|时间:2017-03-26|JAVA基础Ⅱ]上篇回顾上篇文... 查看详情