JAVA笔记
小概念
艾负爱克斯
这个作者很懒,什么都没留下…
展开
-
2021-05-13
1、false是特殊直接量,不是java关键字;native是java关键字2、被动引用不会触发子类初始化。子类引用父类的静态字段,只会触发子类的加载、父类的初始化,不会 导致子类初始化;通过数组定义来引用类,不会触发此类的初始化;常量在编译阶段会进行常量优化,将常量存入调用类的常量池中,本质上并没有直接引用到定义常量的类,因此不会触发此类的的初始化。3、throws和throw:throws出现在方法头,表示可能会出现异常;throw在方法体中,抛出了异常,执行throw则一定抛出了某原创 2021-05-13 11:59:44 · 45 阅读 · 0 评论 -
2021-05-09
1、面向对象设计,每个类的职责应该单一。2、面向过程语言对比面向对象更加灵活?3、jps:查看本机java进程信息;jstack:打印线程的栈信息,制作线程dump文件;jmap:打印内存映射,制作堆dump文件;jstat:性能监控工具;jhat:内存分析工具;jconsole:简易的可视化控制图;jvisualvm:功能强大的控制台。4、floor向下取整(向左边移)5、负数最高位符号位一定为1,原码中1所在的位数越高值越小。而补码是由原码取反加1得到的,则在补码中1所在的位数一定要原创 2021-05-09 13:18:09 · 47 阅读 · 0 评论 -
2021-05-03
1、G1收集器是1.7商用的。2、hashcode没有equals可靠。3、在preparedstatement中,一个占位符“?”只能对应一个值。4、无论如何,Interger和new Interger不会相等。不会经历拆箱过程。两个都是非new出来的Interger,如果数在-128-127之间,则是true,否则为false;(常量池缓存好的感觉)两个都是new出来的,结果为false;int和Interger(无论new否)比,都为true,因为会把Interger自动拆箱为int再原创 2021-05-03 15:40:19 · 51 阅读 · 0 评论 -
2021-04-27
1、同步器是一些使线程能够等待另一个线程的对象,允许它们协调动作。最常用的同步器是CountDownLatch和Semaphore,不常用的是Barrier和Exchanger。2、Object的getClass作用是返回运行时的类的名字。3、软件分为系统软件和应用软件,操作系统属于软件部分。计算机由硬件和软件组成。4、finalize方法一个对象只能执行一次,并不会在每次垃圾回收器执行的时候都会被调用。5、java中所有由类实例化的对象和数组都存放在堆内存中。6、对于String str=ne原创 2021-04-27 11:35:38 · 42 阅读 · 0 评论 -
2021-04-26
1、hashMap维护的是一个数组,数组里面的每个单元又是一个个链表,那么为什么会产生hash冲突呢?hash函数计算不同的key的时候,可能得到相同的hash值开放地址法:当冲突发生的时候,通过查找数组的一个空位,将数据插入进去,而不再用hash函数计算获取数的下标,这个方法就叫做开发地址法;数组的每一个闲置的空间我们都能使用,前提是这个位置没有被其他的值占用,由于数组是连续的,所以我们需要循环的去寻找一个这样的位置链地址法:在hash表每个单元中设置链表,某个要插入的数据项的关键字还是像通常那样映原创 2021-04-26 15:29:54 · 53 阅读 · 0 评论 -
2021-04-25
1、运行时异常顾名思义就是程序在运行(非编译)的时候出现异常,隐含的一个前提是在编译的时候检测不到异常的存在,作者本并不知道是否自己的代码中是否有运行时的异常,所以怎么必须提前使用try-catch捕获。运行时异常,编译器没有强制对其进行捕捉和处理。一般都会将异常向上抛出,直到遇到处理代码位置,若没有处理块就会抛到最上层,多线程用thread.run()抛出,单线程用main()抛出,常见的运行时异常包括空指针异常、类型转换异常、数组越界异常、缓冲区溢出异常,算术异常等。2、ASCALL码中有一些特殊字原创 2021-04-25 19:40:55 · 40 阅读 · 0 评论 -
2021-04-21
1、类中的数据域使用private修饰为私有变量,则不能在别的类中访问,但是:本类方法可以访问反射也可以访问。2、session属性是键值对。3、final修饰的成员变量在赋值时可以有三种方式:在声明时直接赋值;在构造器中赋值;在初始代码块中进行赋值。4、finally语句在return或者throw语句前执行。如果有异常发生但是没被catch捕获(比如在try中throw),finally则在异常抛给上层之前执行。5、处于运行速率的考虑,java编译器会把经常访问的变量放到缓存(严格讲原创 2021-04-21 12:38:03 · 121 阅读 · 0 评论 -
2021-04-19
1、不可变类,说的是一个类一旦被实例化,就不可改变自身的状态。常见的比如String和基本数据类型的包装类,对于这种不可变类,一旦在进行引用传递的时候,形参一开始就和实际参数指向不是一个地址,所以在方法中对形参的改变,并不会影响实际参数。(值传递)2、SQL语言又称为结构化查询语言。3、就近原则:如果局部变量名和成员/静态变量名是相同,没有特别指代,方法内就使用就近原则。在类方法中,不可以直接调用非静态方法和变量,但是可以通过创建实例对象来调用类的实例方法(非静态)。4、匿名类:5、throw用于原创 2021-04-19 14:44:25 · 44 阅读 · 0 评论 -
2021-04-17
1、用try-catch 捕获异常;用try-finally 清除异常;用try-catch-finally处理所有的异常。三者选一种即可。2、多种混合运算时,自动转换将所有数据类型转换为容量最大的一种数据类型。(不能受到求余运算时结果的正负号和被求余的数(第一个数)的正负号相同的影响,就觉得数据类型也是一样的)3、hasNext不是object中的,是迭代器中的object中没有copy方法,但是有clone方法,用于创建并返回该对象的一个副本。object类的方法:4、java的跨平台特原创 2021-04-17 18:28:11 · 164 阅读 · 0 评论 -
2021-04-14
1、hashmap在单线程中使用大大提高效率。在多线程的情况下使用hashtable来确保安全,hashtable中使用synchronized关键字来实现安全机制,但是synchronized是对整张hash表进行锁定即让现场独享整张hash表,在安全的同时造成了浪费。ConcurrentHashMap分段加锁的机制来确保安全,使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安全。Arrays原创 2021-04-14 12:27:57 · 64 阅读 · 1 评论 -
2021-04-12
1、java中%求余操作只有整型才能使用,实践证明,虽然使用别的数据类型不会报,但是求出的结果不一定正确。2、wait(),用于将当前线程置入休眠状态,知道接到通知或被中断为止。只能在同步块或者同步方法中使用。notify/notifyAll,用来通知那些可能等待该对象的对象锁的其他线程,如果有多个线程等待,则线程规划器任意挑选出其中一个wait状态的线程发出通知,并使它等待获取该对象的对象锁(notify后,当前线程不会马上释放该对象锁,wait所在的线程并不能马上获取该对象锁,要等到程序退出同步代码原创 2021-04-12 12:22:48 · 46 阅读 · 0 评论 -
2021-04-11
1、Hashtable是一个散列表,存储的内容是键值对映射,键和值都不可以为null,同步,线程安全,继承自Dictionary,而不是AbstactMap;Hashtable直接使用对象的hashcodehashmap:由数组+链表组成,基于哈希表的map实现,链表则主要是为了解决哈希冲突而存在的。不是线程安全的,键和值都可为null,hashmap重新计算hash值。2、继承Thread,没有重写run方法时调用父类的run方法;实现Runnable接口,必须重写run方法。3、不管是类内部调用原创 2021-04-11 20:50:45 · 56 阅读 · 0 评论 -
2021-04-11
1、RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另一台计算机上的对象来获取远程数据。RMI是Enterprise JavaBeans的支柱,,是建立分布式java应用程序的方便途径。再过去,TCP/IP通信协议是远程通讯的主要手段。2.System.out.println(100+5+“is”);和System.out.println(“is”+100+5);不一样前者是原创 2021-04-11 16:52:52 · 34 阅读 · 0 评论 -
2021-04-09
1、基类就是父类。成员还包括静态成员。2、for循环,三个表达式都为空也是可以的。我们使用while就是为了它的循环次数是不定的,而for循环一般限定了循环次数。但实质上,while循环能够实现的操作,for循环也能实现。3、在Java中,静态变量只能在类主体中定义,不能在方法中定义,静态变量属于类所有而不属于方法。局部变量不能添加public等各种访问权限修饰符,但是可以用final修饰。4、java中只有左移右移和无符号右移(>>>),没有无符号左移(<<<原创 2021-04-09 15:16:44 · 264 阅读 · 0 评论 -
2021-04-07
1、依赖注入(DI):组件之间依赖关系由容器在运行期间决定,形象地说,即由容器动态地将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活,可扩展的平台。依赖注入的动机就是减少组件之间的耦合度,使开发更为简洁。2、%取余运算最后结果的符号和第一个值得符号一样。如:-12%6=-2;-12%-2=-6;12%-2=6Math.floorMod()是取模,最后结果符号和第2个值一样。3、str.split(“分隔符”);返回一个字符原创 2021-04-07 20:54:09 · 144 阅读 · 0 评论 -
2021-04-06
1、System是类不是包,属于java.lang.system。2、java内存模型:(1)线程私有程序计数器:标记当前线程执行的字节码,指示当前线程所执行的字节码执行到第几行;用于线程切换能恢复到正确位置。每个线程都有一个。虚拟机栈(有的也叫java栈):一个线程的每个方法在执行的时候都会创造一个栈帧,存储局部变量表,操作站,动态链接,方法入口,当每个方法被调用的时候,栈帧入栈,方法执行完后,栈帧出栈。本地方法栈:本地方法栈在作用,运行机制,异常类型等方面和虚拟机栈相同。区别是:虚拟机栈执行的原创 2021-04-06 20:48:22 · 64 阅读 · 0 评论 -
2021-04-04
1、switch表达式支持整型、char,枚举后来java7之后也支持String2、HashMap的数据结构是:数字+链表\红黑树数组是HashMap的猪蹄,链表则是为了解决哈希冲突而存在的。HashMap内部包含了一个默认大小为16 entry类型的数组table,其中每个Entry是一个链表,当链表长度大于等于8时会将链表转换为红黑树。...原创 2021-04-04 17:58:41 · 49 阅读 · 0 评论 -
2021-04-02
1、byte能表示的范围[-128,127]2、两同两小一大原则:方法名相同,参数类型相同;子类返回值类型小于或者等于父类返回值类型;子类抛出异常小于等于父类方法抛出异常;子类访问权限大于等于父类方法访问权限。3、Lambda表达式的主要作用就是代替匿名内部类的繁琐语法,它有三部分组成:(1)形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也能省略。(2)箭头(->),必须通过英文中画线和大于符号组成.(3)代码块。如果代码块只包含一条语句,La原创 2021-04-02 17:09:39 · 77 阅读 · 0 评论 -
2021-04-01
1、this和super都指的是对象,static修饰的方法是类方法。2、javax是Sun公司提供的一个扩展包。算是对java包做的一些优化处理。3、没有break,发生case穿透现象,程序会继续向下执行,直到遇到break或者结束switch语句的大括号为止。4、取反后正数的符号位改变为负数,这时需要用补码表示(除符号位外取反+1)5,、使用try…catch…finally,不管出不出异常都必须执行finally,这里包括假设try或者catch的代码块中有return,也必须先执行完fin原创 2021-04-01 12:25:39 · 66 阅读 · 0 评论 -
2021-03-31
1、if语句比较,除了boolean外的其它类型都不能使用赋值语句,否则会提示无法转成布尔值。2、length 得到的是字符,不是字节。中文和英文一样,看做一个字符。3、static块和方法不能出现this和super静态方法除了可以使用类名调用,实例对象也可以调用静态方法。4、HttpServletResponse完成:设置HTTP头标,设置cookie,设置返回数据类型;读取路径信息是HttpServletRequest做的。5、三大类加载器:启动类(Bootstrap)加载器–顶层,扩展类(原创 2021-03-31 12:02:31 · 55 阅读 · 0 评论 -
2021-03-30
1、接口是一种特殊的类,由全局常量和公共的抽象方法组成。接口中一般权限都是public。抽象方法:用public abtract修饰,修饰符可以省略。属性用public static final 类型 变量名=值;public static final 修饰符可以都省略,也可以省略一个。不管省略与否,final修饰的属性必须赋值。2、静态代码块中的变量为局部变量,不影响静态变量(类属性)的值。静态变量属于当前类,其值得改变会影响整个类运行,即区别于值传递,在每个方法中类属性的改变在方法结束后也是原创 2021-03-30 14:38:21 · 58 阅读 · 0 评论 -
2021-03-25
1、关键字final表明一个对象或变量的引用在初始化后不能被修改。final修饰的变量内容是不能修改的,如果final修饰一个对象的引用,那么指的是这个对象的地址值是无法改变的,对象的内容还是可以修改的。如果final修饰的是一个普通变量的话,就是变量的值无法修改。综上:final修饰变量的本质就是,修饰的变量值(地址或内容)无法改变。2、off-heap叫做堆外内存,将你的对象从堆中脱离出来序列化,然后存储在一大片内存中,这就像它存储到磁盘上一样,但它仍然在RAM中。对象在这种状态下不能直接使用(对原创 2021-03-25 11:48:25 · 46 阅读 · 0 评论 -
2021-03-24
1、static {x+=5}; //静态代码块{//普通代码块 }父类静态变量—》 父类静态代码块(只执行一次)—》子类静态变量(只执行一次)–》子类静态代码块—》main方法(这个不确定)----》父类非静态变量–》父类普通代码块—》父类构造方法–》子类非静态变量–》子类代码块(构造块?)—》子类构造方法每次实例化对象时都会执行构造块中的代码。2、在java继承中,子类能继承父类的所有成员(注意:这里的继承和调用不一样,比如私有方法可以继承但是不能调用)注意:对构造方法不是继承的,而是显式原创 2021-03-24 12:07:11 · 45 阅读 · 0 评论 -
2021-03-18
1、子类重写父类的方法,权限不能比父类的小。2、Garbage Collectuon(gc):垃圾回收器。当对象的所有引用都消失后,对象使用的内存将自动回收。3、注意:主方法内的变量也属于类方法内的局部变量,必须赋初值。4、switch后的控制表达式只能是short,char,int,long整数类型和枚举类型,不能是float,double和boolean类型,String类型是java7开始支持。5、Math.cos计算的是弧度的余弦值,Math.toRadians函数是将角度转换为弧度。6、原创 2021-03-18 11:19:24 · 49 阅读 · 0 评论 -
2021-03-17
1、Statement是PreparedStatement的父接口;PreparedStatement是CallableStatement的父接口;可以说是孙子继承爷爷,儿子继承爸爸,但是不能说爷爷是孙子的父亲。2、数值型变量在默认情况下为int型,byte和short型在计算时会自动转换为int型的计算,结果也是int型。3、weblogic中开发消息Bean时的persistent和non-persistent的差别:persisitent方式的MDB可以保证消息传递的可靠性,也就是如果EJ原创 2021-03-17 13:07:54 · 464 阅读 · 0 评论 -
2021-03-16
1、AOP(面向方面/切面编程):偏重业务处理过程的某个步骤或阶段,强调降低模块之间的耦合度,使代码拥有更好的移植性。可以说是面向业务中的动词领域。AOP的一个很重要的特点是源代码的无关性,也就是说我们的系统中引用了AOP组件,即使我们把该组件去掉,系统代码也应该能够编译通过。要实现这一点,可以使用动态proxy模式。AOP将散落在系统中的“方面“代码集中实现;AOP有助于提高系统可维护性;AOP是一种设计模式,Spring提供了一种实现。OOP(面向对象编程):对业务分析中抽取的实体方法和属性进行封装原创 2021-03-16 12:17:14 · 84 阅读 · 0 评论 -
2021-03-12
1、局部变量是指类方法中的变量,必须初始化。局部变量运行时被分配在栈中,量大,生命周期短,如果虚拟机给每个局部变量都初始化一下,是一笔很大的开销,但变量不初始化为默认值就使用是不安全的。出于速度和安全性两个方面的综合考虑,解决方案就是虚拟机不初始化,但要求编写者一定要在使用前给变量赋值。2、方法的重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数类型和参数个数。3、整型包装类对象比较和基本数据类型中的整型数值比较不一样。比如在为Integer赋值的时候,java编译器会将其翻译成调用v原创 2021-03-12 11:51:15 · 38 阅读 · 1 评论 -
2021-03-11
1、start()方法是启动一个线程的 意思,此时线程处于就绪状态,但并不一定就会执行,还需要等待CPU的调度。run()方法才是线程获得CPU时间,开始执行的点。2、J2EE中,Servlet过滤器的配置包括两部分:(1)过滤器在web应用中的定义,由 filte r元素表示,包括filter-name和filter-class两个必需的子元素。(2)过滤器映射的定义,有filter-mapping元素表示,可以将一个过滤器映射一个或者多个Servlet或JSP文件,也可以采用url-patter原创 2021-03-11 17:14:48 · 90 阅读 · 0 评论 -
2021-03-09
1、PreparedStatement和Statement:在java中,Statement和PreparedStatement用于在已经建立数据库连接的基础上向数据库发送要执行SQL语句。Statement用于执行不带参数的简单SQL语句;PreparedStatement可以执行带参数的预编译SQL语句 。在执行同一个SQL语句时,PreparedStatement只对它进行一次的解析和编译,其后可以利用PreparedStatement对象高效地多次执行。而对于Statement来说,每次执行同一个原创 2021-03-09 10:52:38 · 53 阅读 · 0 评论 -
2021-03-05
1、JVM参数配置中:-Xmx指定jvm的最大堆大小。-Xms指定jvm的初始堆大小。即最小内存值-XMn指定jvm中年轻代(New Ceneration)的大小。XX:SurvivorRatio:指定年轻代中Eden区与Survivor区的大小比值为3,而Survivor区有两个,即将年轻代看做5份,每个Survivor区占一份,Eden区占3份,Survivor区大小=5120/5=1024m,Survivor区总大小为2048m(Survivor区有两个,占两份)2、byte是8位有符号数原创 2021-03-05 11:53:03 · 73 阅读 · 1 评论 -
2021-03-04
1、(1)main方法是主方法,是程序的入口。(2)J2SDK表示java 2 软件开发包,以JDK基本上是一样的,包括一系列的开发工具。(3)appletviewer.exe位于jdk安装目录的bin文件夹下,适用于执行applet小程序的。(4)applet不能单独运行,但可以嵌入到其他应用程序(如浏览器中的小程序),因此可以没有main()方法。2、在JDK1.6之前的版本,java中支持switch的数据类型包括byte,char,short,int。JDK1.7时,又增加了String类型原创 2021-03-04 11:53:37 · 72 阅读 · 1 评论