学习java的杂乱笔记

xiaoxiao2021-02-28  37

1.局部变量:定义在方法中的变量,定义在方法中的参数的变量,定义在for循环中变量,都是局部变量, 在栈内存中开辟一个空间,数据使用完毕,自动释放。

2.何定义一个函数?(不需要死记,只需了解) 1.既然函数是一个独立的功能,那么该功能的运算结果是什么要先明确。 是在明确函数的返回值类型 2.在明确定义该功能的过程中是否需要未知的内容参与运算。 明确函数的参数列表(参数的类型和参数的个数)

3.break:只可作用于选择结构与循环结构。 continue:只可作用于循环(loop)结构,结束本次循环,继续下次循环。 continue与break如果没有该有的作用域而单独存在,则没有意义,语句编译失败

4.可以以字母为标号,给for循环标号,也只能给for循环标号!!便于区分

5.累加思想: 通过变量记录住每次变化的结果,通过循环的形式,进行累加操作。 计数器思想 通过一个变量记录住数据的状态变化,也需要通过循环来实现

6.什么时候动用重载?重载与返回值类型无关 当定义的功能相同时,但其中参与运算的未知内容不同时, 那么就定义一个函数名称以表示其功能,方便阅读,而通过参数列表的不同来区分多个同名函数 注意:参数列表中参数是有顺序的!!!!!!!! 7.函数定义思想:每个函数只需要完成他所需要的功能就可以,不需要多余的动作,列如求和语句 只需要完成求和并返回就可以,而不要进行多余的打印输出语句,每个函数都是独立的 只需完成应完成的定义,不需要多余的的定义,如果需要,那也是调用者所干的事,每个函数 则只要返回就可。 8.一:变量都有自己的作用域,对于for循环来讲,如果将控制循环的增量定义在for语句中,变量只在该循环内有效, 当for语句执行完毕,该变量就会在内存中被释放 二:for循环可以与while语句互换,如果需要定义循环变量,则for循环更为合理

9.转义字符:通过\来转变-后面-字母或符号的含义。 \n:换行; \b:退格,相当于BackSpace; \r:按下回车键,在windows系统,回车键是由两个字符来表示\r,\n 在Linux系统,回车键只由一个字符表示 \t:制表符,相当于tab键

10. 堆内存中每一个实体都有一个内存地址值,或有或无的被栈内存中的定义变量所含的地址值所引用,而不是直接代表

11.数组角标从零开始,而且数组一被定义就都有值且默认值为0.

12.堆内存中的实体都是封装数据的,且都有默认初始化值

13.面向对象的三个特征:1,封装;2,继承;3,多态;

14.对象与类的区别: 类是对现实生活中事物的描述。 对象是这类事物实实在在存在的个体。

15,其实定义类就是在描述事物,就是在定义属性与行为;属性与行为共同称为类中的成员(成员变量和成员方法);

16,类类型变量指向对象

17,成员变量与局部变量的区别: 作用范围: 成员变量作用于整个类中, 局部变量作用于函数中或语句中; 在内存中的位置: 成员变量在堆内存中,因为对象的存在,才在内存中存在; 局部变量存在在栈内存中。

18,private:私有,权限修饰符,用于修饰类中的成员(成员变量,成员函数)。私有只在本类中有效 将成员变量私有化,对外提供set get方法对其进行访问,提高对数据访问的安全性 注意:私有仅仅只是封装的一种形式,私有是封装,但封装不是私有 19,构造函数的定义: 1.函数名要与类名一致 2.不用定义返回值类型 3.不用写return语句 对象一建立就会调用与之对应的构造函数 构造函数可以用于对象进行初始化 细节:当一个类中没有定义构造函数时,那么系统会默认会给该类加入一个空参数的构造函数 方便于该类进行初始化,当在类中自定义了构造函数后,默认的构造函数就没了 构造函数与一般函数的区别: 1.在写法上不同 2.在运行上不同 构造函数就是在对象一建立就运行,给对象初始化 一般函数是在对象调用才执行,给对象添加对象具备的功能 一个对象建立,构造函数只运行一次 一般函数可以被对象调用很多次 什么时候定义构造函数: 当分析事物时,该事物存在即具备一些特性或者行为,那么将那些内容定义在构造函数中 一个类中默认会有一个空参数的构造函数,这个默认的构造函数的权限与所属类一致 如果类被public修饰,那么默认的构造函数也带public修饰符 如果类没被public修饰,那么默认的构造函数也没有public修饰

默认的构造函数的权限是随着类的变化而变化的 20.构造代码块:作用:给对象进行初始化 对象一建立就运行,而且优先于构造函数执行 与构造函数的区别: 构造代码块是给所有对象进行统一初始化 而构造函数时给对应的对象初始化。 构造代码块中定义的是不同对象共性的初始化内容 new xxx(); 其中先默认初始化,null或者0等,显示初始化,再构造代码块初始化,再构造函数初始化,有先后顺序 21.this关键字: 代表它所在函数所属对象的引用 简单说:那个对象在调用this所在函数,this就代表那个对象 this的应用:当定义类中功能时,该函数内部都要用到调用该函数的对象时,这时用this来表示这个对象 但凡本类功能内部使用了本类对象,都要用this表示 this的功能:1.用以区分局部变量和成员变量的同名情况。 2.用于构造函数之间进行互相调用。 注意:this语句只能定义在构造函数的第一行,因为初始化要先执行,否则会报错 对this的调用必须是构造器中的第一个语句。 22.java中有堆内存,栈内存,以及方法区(共享区,数据区);

23.static关键字: 用法:是一个修饰符,用于修饰成员(成员变量,成员函数); 当成员被静态修饰后,就多了一种调用方式,除了可以被对象调用外, 还可以直接被类名调用,方式:类名.静态成员 定义的静态的成员变量又称类变量,类被调用就执行

成员变量又称实例变量

static特点: 1.随着类的加载而加载。 也就是说,静态会随着类的消失而消失,说明它的生命周期最长。 2.优先于对象存在 明确一点,静态是先存在,对象是后存在 3.被所有对象所共享 4.可以直接被类名调用 实例对象和类变量的区别: 1.存放位置: 类变量随着类的加载而存在于方法区中 实例对象随着对象的建立而存在于对堆内存中 2.生命周期: 类变量生命周期最长,随着类的消失而消失 实例变量声明周期随着对象的消失而消失 静态的使用注意事项: 1.静态方法只能访问静态成员。 非静态方法既可以访问静态,也可以访问非静态 2.静态方法中不可以定义this,super关键字 因为静态优先于对象存在,所以静态方法中不可以出项this 3.主函数是静态的 静态有利有弊: 利处:对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象都存储一份, 可以直接被类名调用 弊处:生命周期过长。 访问出现局限性(静态只能访问静态、。; 24.什么时候使用静态? 要从两方面下手: 因为静态修饰的内容有成员变量和成员函数。 什么时候定义静态变量(类变量)? 当对象中出现共享数据时,该数据被静态所修饰 对象中的特有数据要定义成非静态存在于堆内存中。 什么时候定义静态函数? 当功能内部没有访问到非静态数据(对象的特有数据) 那么该功能可以定义成静态的。 25.文档注释的特殊字符: @auther 作者 @version 版本号 @param 参数 @return 返回值 26.Person p =new Person("张三",20);

该句话都做了什么事? 1.因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。 2.执行该类中的static代码块,如果有的话,给Person.class类进行初始化。 3.在堆内存中开辟空间,分配内存地址。 4.在堆内存中建立对象的特有属性,并进行默认初始化。 5.对属性进行显示初始化。 6.对对象进行构造代码块初始化 7.对对象进行对应的构造函数初始化。 8将内存地址赋给栈内存中的p变量。

27.事物不仅仅只有继承关系,还有聚集:聚合和组合。

28.子类的实例化过程:(逐级向上找)

子类中的所有构造函数默认都会访问父类中的空参数构造函数,因为子类构造函数 中的第一行都有一句隐式的super语句。 当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来指定要访问的父类中的构造函数, 当然,子类中的构造函数第一行也可以手动指定this语句来访问本类中的构造函数,子类中至少会有一个构造函数会访问 父类中的构造函数。 注意:this和super语句不能在一个函数中,因为两个函数都必须在第一行, 而为什么this和super语句为什么在第一行,因为两个语句要进行初始化,如果不在第一行, 初始化没有意义。 29.什么是模板方法 在定义功能时,有一部分功能是确定的,而有另一部分功能是不确定的,而且确定的功能在使用不确定的功能时, 可以将不确定的功能暴露出去,由子类进行覆写。 30.public,protected,private是Java里用来定义成员的访问权限的,另外还有一种是“default”,也就是在成员前不加任何权限修饰符。如: public class A{ void method(){}; } method就属于default权限。

这四个修饰符的访问权限如下表: ----------------------------------------------- 类内部 package内 子类 其他 public 允许 允许 允许 允许 protected 允许 允许 允许 不允许 default 允许 允许 不允许 不允许 private 允许 不允许 不允许 不允许 -----------------------------------------------

比如:用protected修饰的成员(变量或方法),在类内部可以调用,同一个package下的其他类也可以调用,子类里也可以调用,其他地方则不可以调用, 也就是说在其他

Java语言定义了public、protected、private、abstract、static和final这6常用修饰 词外还定义了5个不太常用的修饰词,下面是对这11个Java修饰词的介绍: 1.public 使用对象:类、接口、成员 介绍:无论它所处在的包定义在哪,该类(接口、成员)都是可访问的 2.private 使用对象:成员 介绍:成员只可以在定义它的类中被访问 3.static 使用对象:类、方法、字段、初始化函数 介绍:成名为static的内部类是一个顶级类,它和包含类的成员是不相关的。静态方法 是类方法, 是被指向到所属的类而不是类的实例。静态字段是类字段,无论该字段所在的类创建了 多少实例,该字 段只存在一个实例被指向到所属的类而不是类的实例。初始化函数是在装载类时执行 的,而不是在创建 实例时执行的。 4.final 使用对象:类、方法、字段、变量 介绍:被定义成final的类不允许出现子类,不能被覆盖(不应用于动态查询),字段值 不允许被 修改。 5.abstract 使用对象:类、接口、方法 介绍:类中包括没有实现的方法,不能被实例化。如果是一个abstract方法,则方法体 为空,该方 法的实现在子类中被定义,并且包含一个abstract方法的类必须是一个abstract类 6.protected 使用对象:成员 介绍:成员只能在定义它的包中被访问,如果在其他包中被访问,则实现这个方法的类 必须是该成 员所属类的子类。 7.native 使用对象:成员 介绍:与操作平台相关,定义时并不定义其方法,方法的实现被一个外部的库实现。 8.strictfp 使用对象:类、方法 介绍:strictfp修饰的类中所有的方法都隐藏了strictfp修饰词,方法执行的所有浮点 计算遵守 IEEE 754标准,所有取值包括中间的结果都必须表示为float或double类型,而不能利用 由本地平台浮 点格式或硬件提供的额外精度或表示范围。 9.synchronized 使用对象:方法 介绍:对于一个静态的方法,在执行之前jvm把它所在的类锁定;对于一个非静态类的方 法,执行 前把某个特定对象实例锁定。 10.volatile 使用对象:字段 介绍:因为异步线程可以访问字段,所以有些优化操作是一定不能作用在字段上的。 volatile有时 可以代替synchronized。 11.transient 使用对象:字段 介绍:字段不是对象持久状态的一部分,不应该把字段和对象一起串起。

31.接口与继承的区别: 接口是对象和事物的拓展属性,属于单独的,属于每个实现接口的类。 而继承则是子类对父类的全部传递,并增加一些子类所特有的属性, 列如高三学生是学生的一种,高三学生继承了学生的一切属性和方法,如学习和思考。 而有部分高三学生还会抽烟,喝酒等,如果用继承,则代表所有学生都会抽烟,喝酒。然而只是 部分高三学生会。所以用接口来表示拓展属性。 32.多态:事物存在的多种体现形态。 多态的体现:父类的引用指向了子类的对象, 父类的引用也可以接受子类的对象。 Person m = new Man(); 多态的前提:必须类与类有关系,要么继承,要么实现,且子类对父类存在覆盖。 多态的好处:多态的出现大大提高了程序的拓展性。 多态的弊端:虽然提高了代码的拓展性,但只能使用父类的引用来访问父类中的成员。 多态自始自终都是子类对象在做着变化,可以转换的是父类应用指向了自己的子类对象时,可以向上转换,也可以强制转换。 在多态中成员函数的特点: 在编译时期,参阅引用型变量所属的类中是否有调用的方法,如果有,编译通过,否则失败。 在运行时期,参阅对象所属的类中是否有调用的方法 即,成员函数在多态调用时,编译看左边,运行看右边。 在多态中,成员变量的特点; 无论编译还是运行,都参考左边(引用型变量所属的类) 在多态中,静态成员函数的特点: 无论编译还是运行,都参考左边。 33.异常:程序在!运行!时产生的不正常情况。 异常的由来:异常在现实生活中也是具体的问题,Java在将这些问题描述成类,并封装成对象。 就是Java对不正常情况进行描述后的对象表现。 对于问题的划分:一种是严重的问题-Error ,一种则是严重的----Exception 对于Error问题不进行代码处理,而Exception问题进行处理 但Error与Exception都具备一些共性 列如不正常情况的信息,引发原因等 Throwable --Error --Exception 34.在Exception类中有一个特殊的类RuntimeExceptiom 如果在函数内容抛出异常,函数上可以不声明,编译一样通过 如果在函数声明了异常,调用者可以不处理,编译一样通过,之所以不需要调用者处理,是因为不需要 当该代码异常发生时,RuntimeException希望这段代码停止,因为在运行中,如果出现了停止,则应该停止操作,修改代码 自定义异常时,如果该异常的发生,程序无法继续,则让自定义类继承RuntimeException 对于异常分为两类 1.编译时被检测的异常 2.编译时不被检验的异常,而运行时被检验的异常(RuntimeException及其子类)

35.异常在子父类中的覆盖体现: 1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖的方法只能抛出父类的异常或者该异常的子类。 2.如果父类中抛出了多个异常,那么子类在覆盖该方法时,那么子类只能抛出的是父类的子集 3.如果父类或者接口的方法中没有异常抛出,则子类在覆盖的方法中也不许抛出异常 如果子类方法中出现了异常,只能进行try处理,不可以抛出。 36.多线程: 进程:是一个正在执行的程序。 每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元。即在cpu中开辟运行的空间 线程:是进程中一个独立的控制单元。线程控制着进程的执行 一个进程中至少有一个线程。 jvm在启动时会有一个进程 Java。exe 该进程中至少有一个线程在负责Java程序的执行 而且这个线程运行的代码存在于main方法中 该线程称之为主线程。 拓展: jvm其实启动的不止一个线程,还有负责垃圾回收机制的线程。 创建线程的第一种方法,继承Thread类 1.定义类继承Thread。 2.覆写Tread中的run方法 将自定义代码写入run方法中,使线程运行。 3.调用线程的start方法 start方法:1.启动线程。2.调用run方法

发现在每次运行时,运行结果都不一样。 因为多个线程都在获取cpu的执行权,cpu执行到谁,谁就运行 明确一点,在某一时刻,cpu只能执行一个线程,cpu在高速地在做着切换,以达到效果上的同时运行(多核除外) 我们可以把多线程的运行获取在抢夺cpu的执行使用权。

这也是多线程的一个特性:随机性。谁抢到谁执行。至于执行多长时间,cpu说了算。 创建线程的第二种方法,实现Runnable接口 1.将定义的类实现Runnable接口 2.覆盖Runnable接口中的run方法 将线程要运行的代码块定义在run方法中 3.通过Thread来创建线程对象 4.将Runnable的子类对象作为实际参数传入Thread类的构造函数 因为自定义的run方法的所属对象是Runnable接口的子类对象 所以要让线程去执行指定对象的run方法。必须明确run方法的所属对象 5.调用Thread中的start方法开始线程并调用Runnable接口中的run方法。

实现与继承有什么区别? 实现是为了避免单继承的局限性 在定义线程时,建议使用实现Runnable接口方法

区别: 两种方法最大的区别就是run方法的存在的位置不同 继承Thread类,线程代码存在于Thread子类中的run方法中 实现Runnable接口,线程代码存在于Runnable接口中的run方法中

37.泛型类定义: class 类名<泛型名> 泛型通配符 ? 当需要定义未知引用数据类型的对象时,使用泛型,可以更好减少代码 38.Arrays中的asList方法 把数组变成集合,就可以使用集合中的方法,更加简单

但变成集合后不可以使用增删操作,因为数组长度是固定的。会导出.UnsupportedOperationException错误 如果数组中的元素都是对象,那么变成集合时,数组中的元素直接转换成集合中的元素

如果数组中的元素都是基本数据类型,那么会讲这个数组作为对象传入集合。 39. 其实Java自身不具备创建存入数据到文件的功能,只是在调用了windows底层的创建存入方法 Java在其他操作系统上,就调用操作系统内部底层的方法进行操作

40. IOExcption标准处理方法 FileWriter fw =null; try { fw =new FileWriter("a:\\demo.txt");//如果目的值出错,fw初始化失败,fw为null,不能调用close语句,所以要先判断 fw.write("sdfasfas"); } catch (IOException e) { System.out.println(e.toString()); } finally{ try { if(fw!=null) fw.close();//一定要关闭流资源,将其放入finally语句中

} catch (IOException e) {

System.out.println(e.toString()); } }

41.装饰设计模式: 当想要对已有对象进行功能增强时,可以定义类,将已有对象传入, 基于已有的功能,并提供增强的方法,那么该自定义的类称为装饰类 装饰类通常会通过构造函数的方法来接受要被装饰的对象,并基于被装饰类的 方法来提供更加强大的方法

例子:bufferedReader中的readLine方法就是基于FileReader中的read方法 装饰设计模式与继承的区别: 装饰模式比继承要灵活,避免了过多继承而产生的臃肿性,而且降低了类与类之间的联系 装饰类因为是增强已有对象,具备的功能和已有的是相似的,只不过提供了更强的修饰方法 所以装饰类与被装饰类通常都是属于同一体系中的,是组合关系。 42. 流操作的基本规律 三个明确 1.明确源和目的 源:输入流 :字节流:InputStream 字符流:Reader 目的:输出流 :字节流:OutputStream 字符流:writer 2.明确操作的数据是否为纯文本文件 是:字符流 否:字节流

3.当体系明确后,就要明确具体使用哪个对象 通过设备来区分 源设备:内存,硬盘,键盘录入 目的设备:内存,硬盘,控制台 1.将一个文本文件数据复制到另一个文本文件中 源:因为是源,所以使用输入流,InputStream Reader 因为操作的文本为纯文本,所以使用字符流 Reader 明确具体使用设备,硬盘中的文本文件, 所以使用Reader类中的具体操作文件的方法 FileReader

文本文件是否过大,是否需要提高效率,使用缓冲区方法

FileReader fr =new FileReader("yuan.xxx"); BufferedReader br =new BufferedReader(fr);

目的: 因为是目的,所以使用输出流 ,OutputStream Writer

因为操作的文本为纯文本,所以使用字符流 Writer

明确具体使用设备,硬盘中的新文本文件 所以使用Writer类中的具体操作文件的方法 FileWriter

文本文件是否过大,是否需要提高效率,使用缓冲区方法

FileWriter fw =new FileWriter("newmudi.xxx"); BufferedWriter bw =new BufferedWriter(fw);

43.拓展:将键盘录入的数据按照指定编码表(UTF-8)传到一个的文件中 源:因为是输入流,所以为InputStream,Reader 因为为纯文本,所以使用字符流 Reader 设备:键盘,所以使用System.in 但因为要操作方便,所以要转成字符流来操作要快 所以使用Reader类中的InputStreamReader方法将字节转成字符

InputStreamReader isr =new InputStreamReader(System.in);

所输文本是否过大。,是否需要高效,加缓冲区

BufferedRead br =new BufferedRead(isr);

目的:因为是输出流,所以为OutputStream,Writer 因为为纯文本,所以使用Writer

设备:硬盘中的一个新文件,所以使用FileWriter 但是FileWriter使用的默认编码表为GBK

而存储一个指定编码格式为UTF-8的文本文件,只能用转换流中的OutputStreamWriter, 而该转换流要接受一个字节输出流,而且可以操作的字节输出流为FileOutputStream

OutputStreamWriter osw =new OutputStreamWriter(new FileOutputStream("d.txt"),"UTF-8");

是否需要高效,加缓冲

BufferedWriter buw =new BufferedWriter(osw);

涉及到转码中的编码表问题,都需要使用转换流。

44.jar抓包 先将java文件进行包装, 再dos中运行javac -d 包需要放的位置 需编译的java文件 例子:javac -d g:\javab\mypackage AwtDemo5.java 将AwtDemo5进行装包到g:\javab\mypackage中 运行直接在在mypackage中运行java 包名.类名 在进行抓包中,首先进行声明主类,即创建一个文件,将Main-Class: 包名.主类名 然后回车表该行结束。注意冒号后必须有空格 例如 :Main-Class: mymenu.AwtDemo5 抓包格式:jar -cvfn jar名 声明主类文件 包名 例子:jar -cvfm menu.jar Main.txt mymenu

45.TCP与UDP UDP:1.将数据,目的及源封装到数据包中,不需要建立连接。 2.每次传输的数据包的大小限定在64k内 3.因无连接,所以为不可靠连接 4.因为不需要建立连接,所以速度相对较快 例子:对讲机,邮局寄物,视频会议,因为传输很快,数据丢失无所谓 TCP:1.建立数据连接,形成传输数据的通道 2.在传输通道中可以进行大数据的传输。 3.通过三次握手连接完成,是可靠连接 三次握手连接,即客户端向服务器发出请求,服务器回应客户端的请求,客户端接受到回应发回服务器的回馈。 4.因为需要建立连接,所以速度相对较慢 例子;两人打电话,

46.在函数中判断条件,在循环中只求结果,可以在循环外定义一个标记,如果循环中标记改变,则记住结果,否则不记住。列如 boolean flag= true

47.*.split(#) *对象以#分割

48. http请求消息头 /* http://169.254.84.190:12000/myweb/demo.html GET /myweb/demo.html HTTP/1.1 发送get请求,将 Accept: text/html, application/xhtml+xml, */* 支持格式 */*表除以上格式还支持 Accept-Language: zh-CN User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Tride nt/5.0) UA-CPU: AMD64 Accept-Encoding: gzip, deflate 支持封装格式 Host: 169.254.84.190:12000 客户端 Connection: Keep-Alive //可为closed //空行,必须存在,用来分隔头与体 //这部分为请求消息体。 */ 49.InnetAddress 封装的是ip地址 InnerSocketAddress 封装的是ip地址加端口号 50.域名解析,如果输入的是IP地址,直接按照IP地址来打开网页 如果输入的是域名,一般先从本地C盘下的host文件来寻找域名与IP地址的映射。如果有,按照本地文件中的映射打开网页。 如果没有,再从DNS中寻找映射关系。 51.在对象调用指定方法时,必须指定调用对象,以及传入参数。

52.正则表达式:符合一定规则的表达式。 作用:用于专门操作字符串。 特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。 所以学习正则表达式,就是在学习一些特殊符号的使用。 好处:可以简化对字符串的复杂操作。 弊端:符号定义越多,正则越长,阅读性越差。 具体操作功能: 1,匹配:String matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。 2,切割:String split(); 3,替换:String replaceAll(regex,str);如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。 正则表达式的第四个功能。 4,获取:将字符串中的符合规则的子串取出。 操作步骤: 1,将正则表达式封装成对象。 2,让正则对象和要操作的字符串相关联。 3,关联后,获取正则匹配引擎。 4,通过引擎对符合规则的子串进行操作,比如取出。 53.\\1 后向引用,表示表达式中,从左往右数,第一个左括号对应的括号内的内容。 以此类推,\2表示第二个,\0表示整个表达式 $1,$2...是表示的小括号里的内容 $1是第一个小括号里的 ,$2是第2个小括号里的 比如 /gai([\w]+?)over([\d]+)/ 匹配 gainover123 $1= 括号里的 n $2= 第2个括号里的 123 匹配双字节字符(包括汉字在内):[^\x00-\xff] 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 54.static void setErr(PrintStream err) 重新分配“标准”错误输出流。 static void setIn(InputStream in) 重新分配“标准”输入流。 static void setOut(PrintStream out) 重新分配“标准”输出流。 即将System.out.println() System.in转换流 55.随机访问流,RandomAccessFile 可读可写。

56.html中将数据都使用标签进行封装,可以通过标签中的属性来操作被封装的数据。 数据细节化。 57.

转载请注明原文地址: https://www.6miu.com/read-1250394.html

最新回复(0)