![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 59
学好Java,走遍天下都不怕。
FunnyPrince_
种一棵树最好的时间是十年前,其次是现在,我要开始种树啦。
展开
-
Mac下载安装sublime text 3
1.进入sublimetext网址进行下载如图,选择OS X (10.7 or later is required);2.下载完成后双击.dmg可直接打开,之后点击进入参考原创 2021-08-12 23:57:01 · 1566 阅读 · 0 评论 -
Mac安装与配置idea及tomcat
目录下载安装IDEA下载安装TomcatIDEA配置tomcat下载安装IDEA下载安装TomcatApache Tomcat官网下载1.下载:进入官网,选择需要的版本,如图,Mac系统选择tar.gz;2.解压:解压到"/Users/jane/software/bigdata/apache-tomcat-8.5.69/bin"目录;3.启动:进入如图所示bin目录;使用终端运行脚本./startup.sh,如图显示Tomcat started.若提示无权限,则需修改该目录下的.sh文原创 2021-08-12 23:52:29 · 1545 阅读 · 0 评论 -
Mac安装jdk1.8 / mysql5.7.16 与配置环境变量
下载jdk1.8版本[jdk8下载地址](https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html)jdk安装原创 2021-07-31 15:54:34 · 1055 阅读 · 0 评论 -
通过反射--操作运行时类中的指定的属性/方法
操作运行时类中的指定的属性:1.getDeclaredField(String fieldName):获取运行类中指定变量名的属性;2.保证当前属性时可访问的 : 属性.setAccessible(true);3.获取、设置指定对象的此属性值 : 属性.set(); / 属性.get();@Test public void testField1() throws Exception { Class clazz = Person.class; //创建运行时.原创 2021-05-05 17:57:01 · 136 阅读 · 0 评论 -
Java的反射机制
Java Reflection1.Reflection反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。2.加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子, 透过这个镜子看到类的结构,所以,我们形象的称之为:反射。理解反射的运行机制:正常方式:引入需要的“包类"名原创 2021-05-03 01:01:45 · 113 阅读 · 2 评论 -
URL编程
URL类1.URL(Uniform Resource Locator):统一资源定位符,它表示Internet.上某一资源的地址。2.它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。3.通过URL我们可以访问Internet上的各种网络资源,比如最常见的www, ftp站点。浏览器通过解析给定的URL可以在网络.上查找相应的文件或其他资源。URL的基本结构由5部分组成:<传输协议>://<主机名>:<端口号>/<原创 2021-05-02 23:22:32 · 291 阅读 · 0 评论 -
对象序列化机制的理解
1.对象的序列化机制:对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。//当其它程序获取了这种二进制流,就可以恢复成原来的Java对象。即序列化过程 / 反序列化过程:**序列化过程:**将内存中的java对象保存到磁盘中或通过网络传输出去,使用ObjectOutputStream实现;**反序列化过程:**将磁盘文件中的对象还原为内存中的java对象;使用ObjectInputStream实原创 2021-05-02 23:19:56 · 273 阅读 · 0 评论 -
记录TCP协议使用Socket连接,客户端请求服务器read()阻塞问题
如图:客户端与服务端连接不上,服务端处于阻塞状态:首先,使用FileInputStream流输入文件,使用FileInputStream.read()方法读取文件返回int型;其次,关于read()方法的介绍:Reads up to b.length bytes of data from this input stream into an array of bytes. This method blocks until some input is available; 表明read()方式是一个阻塞式原创 2021-05-02 17:53:21 · 570 阅读 · 0 评论 -
复习-网络编程之IP和端口号
一、 网络编程中有两个主要的问题:1.如何准确地定位网络上一台或多台主机;定位主机上的特定的应用(分别对应2.1);2.找到主机后如何可推高效地进行数据传输(分别对应2.2);二、网络編程中的两个要素:1.IP和端口号;2.提供网络通信协议:TCP/IP参考模型(应用层、传输层、网络层、物理+数据链路层)三、通信要素一:IP和端口号IP:1.IP:唯一的标识Internet. 上的计算机(通信实体);2.在Java 中使用InetAddress类代表IP;3.IP分类: IPv4(4原创 2021-05-02 17:37:21 · 298 阅读 · 0 评论 -
IO流
一、流的分类1.操作数据单位:字节流、字符流2.数据的流向:输入流、输出流3.流的角色:节点流、处理流二、流的体系结构三、处理流1.缓冲流BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWritera.作用:提高流的读取、写入效率提高读写速度的原因:内部提供了一个缓冲区b.处理流:就是“套接”在已有的流的基础上。2.转换流a.转换流:属于字符流InputStreamReader:将一个字节的输入流转换为原创 2021-04-30 00:57:32 · 93 阅读 · 0 评论 -
File类
File类的使用1.File类的一个对象,代表一个文件或一个文件目录(文件夹)。2.File类声明在java.io包下3.File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并不会写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流完成。4.File类的对象常会作为参数传递到流的构造器中,指明读取或写入的“终点”。关于相对路径:如果使用Junit中的单元测试方法,相对路径即为当前Module下;如果使用main(),相对路径在当前Project原创 2021-04-30 00:42:41 · 166 阅读 · 0 评论 -
集合与数组
1.集合与数组存储数据概述:集合、数组都是对多个数据进行存储操作的结构,简称java容器注:此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(.txt,.ijp,.avi,数据库中)2.数组存储的特点:①一旦初始化以后,其长度确定了;②数组一旦定义好,其元素类型也就确定了,我们只能操作指定类型的数据。比如:String[] arr, int[] arr1, Object[] arr2;3.数组存储的弊端:①一旦初始化以后,其长度不可修改;②数组中提供的方法非常有限,对于添加、删除原创 2021-04-28 22:29:48 · 274 阅读 · 0 评论 -
map接口
1.单例集合框架结构:Map集合:|—Map接口:双列集合,用来存储一对一对的(key-value)数据。–>函数|—HashMap、LinkedHashMap、TreeMap、HashTable、Properties原创 2021-04-28 22:26:56 · 107 阅读 · 0 评论 -
泛型
关于泛型:1.jdk5.0新增的特性2.在集合中使用泛型:①集合接口或集合类在jdk5.0都修改为带泛型的结构。②在实例化集合类时,可以指明具体的泛型类型。③指明后,在集合类或接口中凡是定义类或接口时,内部结构(构造器,方法,属性等)使用到类的泛型的位置,都指定为实例化的泛型类型。比如:add(E e) --> 实例化后: add(Integer e);④注意:泛型的类型必须是类,不能是基本数据类型,可用包装类替换。⑤如果实例化时,没有指明泛型的类型,默认类型为java.lang.Ob原创 2021-04-28 22:11:14 · 90 阅读 · 0 评论 -
刷题09
1.在Jdk1.7中,下述说法中抽象类与接口的区别与联系正确的有哪些?假定Base b = new Derived(); 调用执行b.methodOne()后,输出结果是什么?正确答案:AA. ABDCB. ABC. ABCDD. ABC解析:只要是被子类重写的方法,不被super调用都是调用子类方法。...原创 2021-04-22 01:18:29 · 922 阅读 · 0 评论 -
List接口的常用方法以及ArrayList/LinkedList源码分析
1.List接口的常用方法ArrayList list = new ArrayList(); list.add(123); list.add(456); list.add("AA"); list.add(new Person("Tom",12)); System.out.println(list);//[123, 456, AA, Person{name='Tom', age=12}]增:add(int index, ob原创 2021-04-20 22:31:50 · 162 阅读 · 0 评论 -
Collection接口
1.单例集合框架结构:Collection集合:|—Collection接口:单列集合:用来存储一个一个的对象|—List接口:存储有序的、可重复的数据。–>“动态”数组|—ArrayList、LinkedList、Vector |---Set接口:存储无序的,不可重复的数据。-->类似于数学的“集合” |---HashSet、LinkedHashSet、TreeSet注:JDK提供的集合API位于java.util包内。2.Collecti原创 2021-04-20 21:49:12 · 136 阅读 · 0 评论 -
Java比较器之Comparable接口与Comparator接口的使用
在java中经常会涉及到对象数组的排序问题,便涉及到对象之间的比较问题。java实现对象排序的方式有两种:自然排序:java.lang.Comparable;定制排序:java.util.Comparator;Comparable接口:自然排序1.像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的方法;2.像String、包装类等重写了compareTo()方法以后,进行了从小到大的排列3.重写compare..原创 2021-04-19 01:33:38 · 207 阅读 · 0 评论 -
String/StringBuffer/StringBuilder的执行效率以及区别
1.String、StringBuffer、StringBuilder的异同?相同点:底层使用char[]进行存储不同点:String:不可变的字符序列StringBuffer:可变的字符序列:线程安全的,效率低;StringBuilder:可变的字符序列:jdk5.0新增,线程不安全的,效率高;2.String、StringBuffer、StringBuilder三者的效率从高到低排列应该是什么顺序?从高到低排列:StringBuilder > StringBuffer > St原创 2021-04-18 12:55:29 · 1964 阅读 · 0 评论 -
String类以及String与基本数据类型/char[]/byte[]之间的转换
String类:1.String 声明为final的,不可被继承2.String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小。3.String内部定义了final char[] value用于存储字符串数据4.String:代表一个不可变的字符序列。简称:不可变性。体现:1).当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值。2).当对现有的字符串进行连接操作时,也需要重写指定内存区.原创 2021-04-18 11:15:16 · 217 阅读 · 0 评论 -
线程同步时,哪些操作会释放锁?哪些操作不会释放锁?
释放锁的操作:1.当前线程的同步方法、同步代码块执行结束。2.当前线程在同步代码块、同步方法中遇到break、return终止 了该代码块、该方法的继续执行。3.当前线程在同步代码块、同步方法中出现了未处理的Error或Exception,导致异常结束。4.当前线程在同步代码块、同步方法中执行了线程对象的wait()方法,当前线程暂停,并释放锁。不会释放锁的操作:1.线程执行同步代码块或同步方法时,程序调用Thread. sleep()、Thread.yield()方法暂停当前线程的执行2.线原创 2021-04-16 01:20:11 · 1302 阅读 · 0 评论 -
如何解决线程安全问题?有几种方式?synchronized与lock有什么异同?
什么情况会产生线程安全问题?当多个线程同时共享同一个数据,做写的操作时,可能会发生数据冲突问题,即产生线程安全问题。读的操作不会发生线程安全问题。(比如A在银行取钱,查询起初余额balance=5000;准备取3000;在做取钱操作的时候发生阻塞了,此时A女朋友也用A的账户查询balance=5000;开始取4000,balance更新为1000,取钱成功;A阻塞完成,开始取3000,balance更新为-2000,取钱成功。如何解决线程安全问题?有几种方式?当线程A在操作共享数据时,其他进程不能参原创 2021-04-15 00:14:58 · 331 阅读 · 2 评论 -
单例模式饿汉式/懒汉式的区别
単例设计模式(Singleton Pattern):所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向原创 2021-04-14 22:56:29 · 210 阅读 · 0 评论 -
使用同步机制解决线程安全问题
线程的生命周期原创 2021-04-14 22:49:52 · 183 阅读 · 0 评论 -
进程和线程的关系与区别是什么?如何创建多线程?
单核CPU和多核CPU:单核CPU:在一个时间单元内,只能执行一个线程的任务。是一种假的多线程。(单核CPU可以“挂起”一个线程,执行另一个线程,看起来像是多线程)多核CPU:多线程。一个Java应用程序java.exe,至少有三个线程:main()主线程,gc()垃圾回收线程,异常处理线程。如果发生异常,会影响主线程。并行和并发:并行:多个CPU同时执行多个任务。比如:多个人同时做不同的事。并发:一个CPU(采用时间片)"同时"执行多个任务。比如:秒杀,多个人做同一件事。注:“同时”:其实是原创 2021-04-14 01:44:53 · 344 阅读 · 1 评论 -
throws与throw有什么关系?区别是什么?
本质上并没有什么关系,只是throw抛出一个异常对象,throws就得处理而已。throw表示抛出一个异常类的对象,生成异常类对象的过程;声明在方法体内。throws:属于异常处理的一种方式,声明在方法的声明处。简单理解其实就是使用throw抛出一个异常类的对象等待处理,然后throws就是处理方式,只不过它的方式是把这个异常丢出去给别人处理。eg://创建一个ecm(),来计算i / j;可能会有输入数据不符合除法运算的可能性,所以就需要throw一个异常对象,然后ecm()就需要采用t原创 2021-04-12 23:48:30 · 330 阅读 · 0 评论 -
异常处理:try-catch-finally与throws的区别及使用情况
Error与ExceptionError:Java 虚拟机无法解决的严重问题。如: JVM系统内部错误、资源耗尽等严重情况。比如: StackOverflowError 和OOM。一 般不编写针对性的代码进行处理。eg:栈溢出、堆溢出 //Exception in thread "main" java.lang.StackOverflowError //1.栈溢出// main(args); //2.堆溢出:java.lang.Ou原创 2021-04-12 23:33:46 · 367 阅读 · 0 评论 -
刷题08
。原创 2021-04-15 01:36:00 · 537 阅读 · 0 评论 -
刷题07
1.正确答案:BA. ErrorB. ExceptionC. RuntimeExceptionD. Throwable解析:error是系统出错,JVM问题,catch是无法处理的,难以修复的;首先Throwable分为Error和Exception.Exception分为CheckedException和RuntimeException;RuntimeException不需要程序员进行捕获处理.我们只需要对exception的实例进行捕获即可.2.根据以下接口和类的定义,要使代原创 2021-04-11 22:47:57 · 737 阅读 · 0 评论 -
刷题06
1.下列外部类定义中,不正确的是:( )正确答案: Cclass x { … }class x extends y { … }static class x implements y1,y2 { … }public class x extends Applet { … }解析:内部类可以是静态static的,也可用public,default,protected和private修饰,外部类的修饰符只能是public,缺省、abstract,final2.已知如下类说明:如下哪些使用是正确的原创 2021-04-11 14:39:02 · 1254 阅读 · 0 评论 -
刷题05
1.抽象类和接口的共同的和区别?相同点:不能实例化,都可以包含抽象方法,都可以被继承;不同点:抽象类:(前提:继承性)有构造器接口:不能声明构造器随着JDK的不断迭代,接口往类的方向不断靠近,增强扩展性...原创 2021-04-11 13:48:14 · 452 阅读 · 0 评论 -
刷题04
排错interface A{ int x = 0;//全局常量}class B{ int x = 1;}class C extends B implements A{ public void pX(){// System.out.println(x);//编译不通过,x不明确 System.out.println(super.x);//1 System.out.println(A.x);//0 } pub.原创 2021-04-09 01:14:28 · 178 阅读 · 0 评论 -
记录一次空指针异常(NullPointerException)的断点调试
前提:SalariedEmployee(月薪资) 和HourlyEmployee(时薪资)子类继承Employee的抽象父类,来获取父类里的属性/方法,并重写扩展为自己的方法。先来看下我的报错情况:NullPointerException此处输出的3是因为我获取了一下当前的月份,所以基本锁定在输出语句System.out.println(month);也就是24行之后;空指针异常:是一个运行级别的异常,即只有在运行时才会抛出NullPointerException;在看到这个异常之后,我首原创 2021-04-08 22:06:14 · 1072 阅读 · 0 评论 -
final关键字/abstract关键字
final关键字:最终的final可以修饰的结构:类、方法、变量final类:此类不能被其他类锁继承eg:String、System/StringBuffer类final方法:不可以被重写Object类中的getClass()final修饰变量:相当于常量①final修饰属性,可以考虑赋值的位置:显式初始化、代码块中初始化、构造器中赋值② final修饰局部变量:尤其是final修饰形参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参,一旦赋值以后,原创 2021-04-08 01:29:54 · 302 阅读 · 0 评论 -
刷题03
1.判断下面①②处代码是否可以编译通过:public class Something { public int addOne(final int x){// return ++x;//① Cannot assign a value to final variable 'x' return x + 1; // ② return 常量+ 1 }}解析: ①处代码return ++x;表示x先自增,再return,常量不可以自增!public class原创 2021-04-08 01:22:23 · 132 阅读 · 0 评论 -
刷题02
利用Vector代替数组处理,从键盘读入学生成绩(以负数代表输入结束),找出最高分,并输出学生成绩等级。提示:数组一旦创建,长度就固定不变,所以在创建数组前就需要知道它的长度。而向量类java. util . Vector可以根据需要动态伸缩。创建Veccter对象: Vector v=new Vector();给向量添加元素: v. addElement(object obi); / /obj必须是对象取出向量中的元素: object obj=v. elementAt(0);注意第一个元素的原创 2021-04-07 01:56:06 · 239 阅读 · 0 评论 -
自动装箱/自动拆箱
int----->Integerchar—>Character2.jdk5.0之后提供了自动装箱和自动拆箱:3.基本数据类型/包装类与String类型之间的转换:Integer i = 10;//自动装箱基本数据类型/包装类–>String: valueOf(Xxx xxx)String–>基本数据类型/包装类: parseXxx(String s)tips:要转成String,找String类的方法要转成包装类,找包装类里的方法...原创 2021-04-06 22:42:23 · 103 阅读 · 0 评论 -
向上转型/向下转型
目的:调用子类特有的属性和方法使用强转符:()Person p = new Man();Man m = (Man)p;可能ClassCastException异常(类型转换异常)使用instanceof关键字:在进行向下转型前判断if( p instanceof Man){ Man m = (Man)p;}...原创 2021-04-06 22:22:44 · 97 阅读 · 0 评论 -
“ == “运算符与equals()方法的区别
**== **:运算符可以使用在基本数据类型变量和引用类型变量中;如果比较的是基本数据类型变量,比较两个变量保存的数据是否相等(不一定类型相同,可以自动类型提升);eg: int i = 10; int j = 10;double d = 10.0;System.out.println(i==j);//trueSystem.out.println(i==d);//true,自动类型提升如果比较的是引用数据类型,比较的是两个对象的地址值是否相等,即两个引用是否指向同一个对象实体;注原创 2021-04-06 02:02:39 · 211 阅读 · 0 评论 -
刷题01
println()打印数组a. int[] arr = new int[]{1,2,3}; System.out.println(arr);b. char[] arr1 = new char[]{'a','b','c'}; System.out.println(arr1); 输出结果:解析:a的println()调用的是Object类中的toString()方法,先将数组转换成String类型然后输出,就是地址值了,相当于:System.out.pr.原创 2021-04-05 23:22:40 · 149 阅读 · 1 评论