java提高部分学习笔记
java提高部分学习笔记
qq_41005604
这个作者很懒,什么都没留下…
展开
-
反射详细总结
文章目录一、java反射机制概述二、理解Class类并获取Class实例三、类的加载与ClassLoader的理解四、创建运行时类的对象五、获取运行时类的完整结构六、调用运行时类的指定结构七、反射的应用:动态代理一、java反射机制概述二、理解Class类并获取Class实例三、类的加载与ClassLoader的理解四、创建运行时类的对象五、获取运行时类的完整结构六、调用运行时类的指定结构七、反射的应用:动态代理...原创 2020-09-05 16:52:00 · 230 阅读 · 0 评论 -
网络编程
文章目录网络编程概述网络基础网络通信要素概述网络通信协议通信要素1:IP和端口号InetAddress类代码示例通信要素2:网络协议TCP/IP协议簇TCP和UDP三次握手四次挥手SocketTCP网络编程基于Socket的TCP编程客户端创建Socket对象服务器建立 ServerSocket 对象练习客户端发送内容给服务端,服务端将内容打印到控制台上客户端发送文件给服务端,服务端将文件保存在本地。从客户端发送文件给服务端,服务端保存到本地。并返回“发送成功”给 客户端。并关闭相应的连接。UDP网络编程.原创 2020-08-29 18:02:54 · 199 阅读 · 0 评论 -
IO流 详细总结
File类的使用IO流原理及流的分类Java IO 原理I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于 处理设备之间的数据传输。如读/写文件,网络通讯等。Java程序中,对于数据的输入/输出操作以“流(stream)” 的 方式进行。java.io包下提供了各种“流”类和接口,用以获取不同种类的 数据,并通过标准的方法输入或输出数据。流的分类按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)按数据流的流向不同分为:输入流,输出流按流的角色原创 2020-08-24 17:08:57 · 1166 阅读 · 0 评论 -
字符编码
编码表的由来计算机只能识别二进制数据,早期由来是电信号。为了方便应用计算机,让它可以识 别各个国家的文字。就将各个国家的文字用数字来表示,并一一对应,形成一张表。 这就是编码表。常见的编码表...原创 2020-08-14 16:47:11 · 59 阅读 · 0 评论 -
IO流 - File文件
File类的使用java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。 如果需要访问文件内容本身,则需要使用输入/输出流。想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对 象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。File对象可以作为参数传递给流的构造器常用的构造器public File(String pathname) 以pathna原创 2020-07-31 16:25:19 · 99 阅读 · 0 评论 -
泛型详细讲解
为什么要有泛型泛型的概念所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类 型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如, 继承或实现这个接口,用这个类型声明变量、创建对象时)确定(即传入实 际的类型参数,也称为类型实参)。从JDK1.5以后,Java引入了“参数化类型(Parameterized type)”的概念, 允许我们在创建集合时再指定集合元素的类型,正如:List,这表明 该List只能保存字符串类型的对象。JDK1.5改写了集合框架中的全部接口和类原创 2020-07-31 08:31:57 · 406 阅读 · 0 评论 -
java集合详细总结
java集合框架的概述一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊 端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。数组在内存存储方面的特点:数组初始化以后,长度就确定了。数组声明的类型,就决定了进行元素初始化时的类型数组在存储数据方面的弊端:数组初始化以后,长度就不可变了,不便于扩展数组中提供的属性和方法少,不便于进行添加、删除、插入等操作,且效率不高。 同时无原创 2020-07-28 20:21:25 · 315 阅读 · 0 评论 -
JDK5.0新增线程创建方式--实现Callable接口、使用线程池
JDK5.0新增线程创建方式新增方式一:实现Callable接口与使用Runnable相比, Callable功能更强大些相比run()方法,可以有返回值方法可以抛出异常支持泛型的返回值需要借助FutureTask类,比如获取返回结果Future接口可以对具体Runnable、Callable任务的执行结果进行取消、查询是否完成、获取结果等。FutrueTask是Futrue接口的唯一的实现类FutureTask 同时实现了Runnable, Future接口。它既可以作为原创 2020-07-27 07:56:04 · 113 阅读 · 0 评论 -
多线程--线程的通信
线程的通信涉及到的三个方法:wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器。notify():一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒优先级高的那个。notifyAll():一旦执行此方法,就会唤醒所有被wait的线程。说明:ait(),notify(),notifyAll()三个方法必须使用在同步代码块或同步方法中【lock中不行】。wait(),notify(),notifyAll()三个方法的调用者必须是同步代码块或同步原创 2020-07-26 16:29:01 · 109 阅读 · 0 评论 -
线程的同步--线程安全的练习
练习银行有一个账户。 有两个储户分别向同一个账户存3000元,每次存1000,存3次。每次存完打 印账户余额。问题:该程序是否有安全问题,如果有,如何解决?【提示】确哪些代码是多线程运行代码,须写入run()方法明确什么是共享数据。明确多线程运行代码中哪些语句是操作共享数据的。/** * 银行有一个账户。 有两个储户分别向同一个账户存3000元,每次存1000,存3次。每次存完打印账户余额。 分析: 1.是否是多线程问题? 是,两个储户线程 2.是否有共享数据? 有,账户原创 2020-07-18 22:09:47 · 311 阅读 · 0 评论 -
线程的同步----解决线程安全问题(Lock锁 — JDK5.0新增)
线程的死锁问题死锁不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃 自己需要的同步资源,就形成了线程的死锁出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于 阻塞状态,无法继续解决方法专门的算法、原则尽量减少同步资源的定义尽量避免嵌套同步public class ThreadTest { public static void main(String[] args) { StringBuffer s1 = new StringB原创 2020-07-18 21:59:10 · 101 阅读 · 0 评论 -
线程的同步----解决线程安全问题(synchronized)(Lock)
理解线程安全问题多线程出现了安全问题问题的原因:当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有 执行完,另一个线程参与进来执行。导致共享数据的错误。解决办法:对多条操作共享数据的语句,只能让一个线程都执行完,在执行过程中,其他线程不可以 参与执行。例子:创建三个窗口卖票,总票数为100张.使用实现Runnable接口的方式问题:卖票过程中,出现了重票、错票 -->出现了线程的安全问题问题出现的原因:当某个线程操作车票的过程中,尚未操作完原创 2020-07-18 21:18:47 · 203 阅读 · 0 评论 -
线程的生命周期
线程的生命周期JDK中用Thread.State类定义了线程的几种状态要想实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类 及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五 种状态:新建: 当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建 状态就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已 具备了运行的条件,只是没分配到CPU资源运行:当就绪的线程被调度并获得CPU资源时,便进原创 2020-07-18 17:36:29 · 56 阅读 · 0 评论 -
多线程的创建和使用
线程的创建和使用Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread 类来体现。API中创建线程的两种方式之一(继承Thread类 )每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常 把run()方法的主体称为线程体通过该Thread对象的start()方法来启动这个线程,而非直接调用run()Thread类构造器Thread():创建新的Thread对象Thread(String threadname):创建线程并指定线程实例名原创 2020-07-18 17:14:27 · 152 阅读 · 0 评论 -
简单概念:程序、进程、线程、并行与并发、多线程的优点
程序、进程、线程程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一 段静态的代码,静态对象。进程(process)是程序的一次执行过程,或是正在运行的一个程序。是一个动态 的过程:有它自身的产生、存在和消亡的过程。——生命周期线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。若一个进程同一时间并行执行多个线程,就是支持多线程的线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开 销小一个进程中的多原创 2020-07-18 14:15:15 · 178 阅读 · 0 评论 -
BigInteger与BigDecimal类
BigInteger类Integer类作为int的包装类,能存储的最大整型值为231-1,Long类也是有限的, 最大为263-1。如果要表示再大的整数,不管是基本数据类型还是他们的包装类 都无能为力,更不用说进行运算了。java.math包的BigInteger可以表示不可变的任意精度的整数。BigInteger 提供 所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。 另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素原创 2020-07-14 08:38:17 · 144 阅读 · 0 评论 -
Math类
Math类java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回 值类型一般为double型。abs 绝对值acos,asin,atan,cos,sin,tan 三角函数sqrt 平方根pow(double a,doble b) a的b次幂log 自然对数exp e为底指数max(double a,double b)min(double a,double b)random() 返回0.0到1.0的随机数 long原创 2020-07-14 08:34:22 · 97 阅读 · 0 评论 -
System类
System类System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。 该类位于java.lang包。由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实 例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便 的进行调用。成员变量System类内部包含in、out和err三个成员变量,分别代表标准输入流 (键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。成员方法native long currentTimeMillis(原创 2020-07-14 08:32:49 · 149 阅读 · 0 评论 -
Java比较器
Java比较器在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间 的比较问题。Java实现对象排序的方式有两种:自然排序:java.lang.Comparable定制排序:java.util.Comparator方式一:自然排序java.lang.ComparableComparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称 为类的自然排序。实现 Comparable 的类必须实现 compareTo(Object obj) 方法,两个对象即原创 2020-07-14 08:29:19 · 114 阅读 · 0 评论 -
JDK8中新日期时间API
新日期时间API出现的背景如果我们可以跟别人说:“我们在1502643933071见面,别晚了!”那么就再简单不 过了。但是我们希望时间与昼夜和四季有关,于是事情就变复杂了。JDK 1.0中包含了 一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用 了。而Calendar并不比Date好多少。它们面临的问题是:可变性:像日期和时间这样的类应该是不可变的。偏移性:Date中的年份是从1900开始的,而月份都从0开始。格式化:格式化只对Date有用原创 2020-07-14 08:17:03 · 113 阅读 · 1 评论 -
JDK8之前日期时间API
JDK8之前日期时间APIjava.lang.System类System类提供的public static long currentTimeMillis()用来返回当前时 间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。 此方法适于计算时间差。计算世界时间的主要标准有:UTC(Coordinated Universal Time)GMT(Greenwich Mean Time)CST(Central Standard Time)此方法前面有介绍!https://blog原创 2020-07-14 08:04:03 · 114 阅读 · 0 评论 -
String的算法题目
一、将一个字符串进行反转。将字符串中指定部分进行反转。比如“abcdefg”反转为”abfedcg”方式一:转换为char[] */ public String reverse(String str,int startIndex,int endIndex){ if(str != null){ char[] arr = str.toCharArray(); for(int x = startIndex,y = endInde原创 2020-07-11 12:20:23 · 163 阅读 · 0 评论 -
System类中获取时间戳的方法、java中两个Date类的使用(java.util.Date类,java.sql.Date类)
System类中获取时间戳的方法System类中的currentTimeMillis()@Test public void test1(){ long time = System.currentTimeMillis(); //返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。 //称为时间戳 System.out.println(time); }java中两个Date类的使用java.util.Da转载 2020-07-10 21:00:06 · 259 阅读 · 0 评论 -
StringBuffer和StringBuilder三者的异同,以及常用的方法和效率的比较
StringBuffer和StringBuilderString、StringBuffer、StringBuilder三者的异同?String:不可变的字符序列;底层使用char[]存储StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储源码分析:String str = new String();//char[] value = new char[0]原创 2020-07-10 20:52:45 · 216 阅读 · 0 评论 -
String的常用方法
String的常用方法int length():返回字符串的长度: return value.lengthchar charAt(int index): 返回某索引处的字符return value[index]boolean isEmpty():判断是否是空字符串:return value.length == 0String toLowerCase():使用默认语言环境,将 String 中的所有字符转换为小写String toUpperCase():使用默认语言环境,将 String 中的所有原创 2020-07-10 20:31:37 · 2451 阅读 · 0 评论 -
String类的概述、理解String的不可变性、String不同实例化方式的对比、String不同拼接操作的对比、面试题
String类的概述String:字符串,使用一对""引起来表示。1.String声明为final的,不可被继承2.String实现了:Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小3.String内部定义了final char[] value用于存储字符串数据4.String:代表不可变的字符序列。简称:不可变 性。体现:(1)当对字符串重新赋值时,需要重新指定内存区域赋值,不能使用原有的value进行赋值。(2)转载 2020-07-10 20:16:18 · 249 阅读 · 0 评论 -
开发团队调度系统
开发软件调度系统目 标主要涉及以下知识点:类的继承性和多态性对象的值传递、接口static和final修饰符特殊类的使用:包装类、抽象类、内部类异常处理需求说明该软件实现以下功能:软件启动时,根据给定的数据创建公司部分成员列表(数组)根据菜单提示,基于现有的公司成员,组建一个开发团队以开发一个新的项目组建过程包括将成员插入到团队中,或从团队中删除某成员,还可以列出团队中现有成员的列表开发团队成员包括架构师、设计师和程序员用单级菜单方式工作。运行时,主界面显示公司成员的列表原创 2020-07-09 21:04:04 · 426 阅读 · 0 评论 -
当finally和return一起出现时的情况、throws、 throws与方法重写
当finally和return一起出现时的情况当finally和return一起出现时的情况:(1)情况一:finally里面有return,结果就是返回finally中的(2)情况二:finally里面没有return,结果就是返回try或catch中的说明:一般情况下不建议在finally中写return,因为写了return其他的return就没有用了public class TestFinallyReturn_5 { public static void main(String[] ar原创 2020-07-06 08:59:25 · 170 阅读 · 0 评论 -
异常处理:try..catch、 异常处理:try..catch...finally、命令行参数的赋值、 final,finalize,finally的区别
异常处理:try…catch1、语法结构try{可能发生异常的代码}catch(异常类型1 异常名称){捕获到该异常,如何处理的代码(1)什么也不写(2)打印异常(3)其他的处理方法}catch(异常类型2 异常名称){捕获到该异常,如何处理的代码}catch(异常类型3 异常名称){捕获到该异常,如何处理的代码}…说明:多个catch有要求,必须是小的在上面,如果没有大小(这里的大小是继承的关系,父类大于子类)随意2、执行的特点(1)如果try中的代码没有发生原创 2020-07-06 08:54:21 · 475 阅读 · 0 评论 -
异常的介绍、异常的父类Throwable、运行时异常、编译时异常
异常的介绍程序正常的情况下是可以运行的,知识偶尔因为其他的原因导致了程序的不正常。列如:用户输入参数的问题(除数不能为零),用户文件被删除,用户控件已满,网络中断程序的运行过程中,可能遇到了“不正常”的情况,导致程序暂停或者崩溃了。不是异常的情况:(1)语法错误,编译都不通过(2)逻辑错误java如何处理异常,java的异常的处理机制是什么样子的?java运行中,如果某句代码发生异常,那么java会在这句代码处停下来,java会创建一个“异常的对象”,并且“抛”出来。java会检测这句代原创 2020-07-06 08:47:06 · 683 阅读 · 0 评论 -
静态导入
静态导入import导包(1)import 包.类名;(2)import 包.;(3)import static 包.类名.静态成员;(4)import static 包.类名.;具体的情况看代码的演示://import java.lang.annotation.ElementType;import java.lang.annotation.Target;//这个样子导包的话就可以把ElementType省略了,代码就不会特别的长import static java.lang.annot原创 2020-07-03 14:07:44 · 71 阅读 · 0 评论 -
五、配置参数
配置参数1、如何声明配置参数?格式:【权限修饰符】 @interface 注解名{数据类型 配置参数名1();数据类型 配置参数名2();}2、配置赋值的问题(1)如果注解声明的配置参数,那么在使用这个注解时,要给这个配置参数赋值标准的复制格式:(配置参数名 1= 参数值1,配置参数名 2= 参数值2…)(2)如果配置参数的个数只有一个,并且名称是value,那么可以省略“配置参数名 =”(3)如果配置参数有默认值,那么可不赋值3、配置参数的类型有要求类型只能是八种数据类型、原创 2020-07-03 14:00:58 · 613 阅读 · 0 评论 -
四、自定义注解
自定义注解一、声明格式:【权限修饰符】 @interface 注解名{}二、使用@注解名三、读取:特别说明如果需要用反射读取某个注解,这个注解声明的时候,一定要增加这个元注解@Retention(RetentionPolicy.RUNTIME)四、元注解元注解:注解注解的注解,给注解加的注解,在注解声明时,在上面加的注解1、@Target 用来标记这个注解可以使用在XXX位置这个位置由ElementType枚举的常量对象来指定。2、@Retention(xx)作用:标记这个注解原创 2020-07-03 13:59:00 · 132 阅读 · 0 评论 -
三、单元测试的注解
单元测试的注解1、声明:第三方声明,不是JDK声明的2、读取:有JUnit框架来读取3、使用(1)引入第三方回归测试框架jar(一堆类的class文件)目前的IDE(Eclipse IDEA)都有集成项目名称 上右键选择 Build Path - Add Library- JUnit - 选择版本(2)可以使用的注解(在方法上面)@Test运行:1、Run as -> JUnit Test 单元测试2、如果没有选择方法,那么当前类的所有的@Test标记的方法都会执行,如果选择其中原创 2020-07-03 13:56:02 · 705 阅读 · 0 评论 -
二、用于文档注释的注解、以及如何设置如何显示文档注解的时间
用于文档注释的注解java中的注释:(1)单行注释(2)多行注释(3)文档注释,java特有需要配合注解使用用于文档注释的注解@author@version@since…@param(1)必须该方法有形参,才能写,有几个形参写几个(2)格式:@param 形参名 形参数据类型 解释@return(1)必须方法的返回值类型不是void,一个方法@return最多有一个(2)格式:@return 返回值类型 解释@throws(1)必须方法throws异常,有几个写几个原创 2020-07-03 13:52:24 · 794 阅读 · 0 评论 -
注解的介绍、一、系统预定义的三个最基本的注解
注解注解长什么样子@注解名注解是什么注解也是注释,这是代码级别的注释,用代码给代码注释注解有三个部分组成(1)声明注解,定义注解我们开发绝大多数都是别人定义好的。(2)使用注解(重要)我们开发中,主要就是使用注解(3)读取注解的信息我们把读取注解信息的代码叫:注解信息处理流程如果没有这一步前面的两部也没有意义读取注解的信息的代码基本上也是别人写好的,读取注解信息代码需要“反射”的知识常见的注解一、系统预定义的三个最基本的注解1、@Override它是由JDK的核心类库定义原创 2020-07-03 13:06:09 · 223 阅读 · 0 评论 -
枚举的介绍、枚举是JDK1.5之后引入的,那么之前如何实现的、以及枚举当中的一些方法
枚举的介绍枚举:列举,罗列枚举是代表这样的一系列的类型,这些类型有一个非常明显的特征,他们的对象是有限个**列如:**Week(星期),我们可以限定Week类型的对象只有7个Season(季节),可以限定对象为四个员工的状态(Status),可以限定为:空闲(Free),忙(Busy),休假(Vocation),离职(Left)枚举类是JDK1.5之后引入的。那么我们先看看JDK1.5之前没有枚举的类型是如何实现枚举的需求?Jdk1.5之前:如何实现这种枚举的需求要点:整个系统中,某个类型原创 2020-07-03 12:54:33 · 417 阅读 · 1 评论 -
Comparable接口与Comparator接口练习:5、请声明一个员工类Employee,有编号,姓名,薪资,实现java.lang.Comparable接口,按照编号升序排序......
题目5、请声明一个员工类Employee,有编号,姓名,薪资,实现java.lang.Comparable接口,按照编号升序排序。在测试类TestEmployee中,创建员工数组,并初始化5个员工,(1)先遍历显示一遍(2)再调用Arrays.sort(Object[] arr)排序,然后再遍历显示一遍(3)再调用Arrays.sort(Object[] arr,Comparator c)排序,然后再遍历显示一遍,按照薪资降序排列Employee类/* * 请声明一个员工类Employee,原创 2020-07-01 23:42:40 · 1446 阅读 · 0 评论 -
java.lang.Comparable接口、 java.util.Comparator接口 详解与区别
java.lang.Comparable接口java.lang.Comparable接口:比较对象大小的标准接口,自然排序的接口这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。需要实现下面这个抽象的方法int compareTo(Object obj)这样子的实现(具体的)当前对象this比obj对象大,返回正整数当前对象this比obj对象大,返回负整数当前对象this和obj相等时,返回0;...原创 2020-07-01 19:28:00 · 168 阅读 · 0 评论 -
局部内部类、匿名内部、匿名内部类的面试题
局部内部类1、如何声明?【修饰符】 class 外部类 【extends 父类】 【implements 父接口们】{【修饰符】 返回值类型 **方法**名(【形参列表】){ 【修饰符】 class 内部类 【extends 父类】 【implemends 父接口们】{ } } }说明:局部内部类的修饰符(1)权限修饰符:没有(2)static没有(3)abstract可以有(4)final可以有2、使用(1)局部内部类有作用域(2)局部内部类中是否能使用外部类的非静态原创 2020-07-01 19:04:37 · 166 阅读 · 0 评论