Java---杂记

1.

当System.out.println()方法的参数是Object类型时,println()方法会自动调用Object对象的toString()方法,然后显示toString()方法返回的字符串。

2.

若Java程序中有多处出现字符串常量"Hello",则Java编译程序只创建一个String对象,所有的字符串常量"Hello"将使用同一个String对象,例如下面的语句:
String s1="Hello";
String s2=" Hello";
String s3=new String("Hello");
String s4=new String("Hello");
则:s1与s2是同一个对象,而s1、s3与s4是三个不同的对象,尽管它们所表示的字符序列相等。

3.

String类的对象都是线程安全的。StringBuffer代表线程安全的可变字符序列。
String类重写了从Object类所继承的equals()方法,而StringBuffer类没有重写该方法。
StringBuffer或StringBuilder是不能比较大小的。

4.

所有的包装类都是final类型,因此不能创建它们的子类。
包装类是不可变类,所有包装类的对象都是线程安全的。
包装类的层次结构

5. 

Math类有两个静态常量:E(自然对数)和PI(圆周率)。
Math类是final类型的,因此不能派生子类。
Math类的构造方法是private类型的,因此Math类不能够被实例化。

6. 正则表达式

(eg1)重复字符压缩:将字符串中连续重复的字符压缩成一个。
例如, “aaabbbcccddd11122++***…33”压缩成“abcd12+*.3”。
相关代码是:设String s =””;则:String rs = s.replaceAll(“(.)(\\1)*”,”$1”);
说明:(.)表示一号组,匹配任何一个字符,\1表示与一号组相同的字符,$1表示在replaceAll()方法中,与一号组相匹配的那个子串。

(eg2)由0~9组成有不重复的7个数字组成的数字串。正则式是:((\d)(?!.*\2.*)){7}

7.

数组复制:System.arraycopy(arr1, start1, arr2, start2, len);
排序:Arrays.sort(a);
Arrays.binarySearch(array, key) 若找到,则返回其index(>=0),若找不到,则返回负数(<0),该负值含义是: -(插入点位置) -1 。再减去1是为了保证:找不到必须返回负数。

向TreeSet容器中加入同类型的对象,要求这些对象的类必须实现Comparable接口。 

8.

LinkedList在内部是采用双向循环链表实现的,插入与删除元素的速度较快,随机访问速度则较慢。
LinkedList也是线程不安全的

 9.

HashMap是基于HashCode的,若想正确使用HashMap,则需重写hashCode()和equals()方法。HashMap不是线程安全的,若要线程安全,可用:Map m = Collections.synchronizedMap(new HashMap());

 10.

redirect:请求重定向:客户端行为,本质上为2次请求,地址栏改变,前一次请求对象消失。举例:你去银行办事(forward.jsp),结果告诉你少带了东西,你得先去***局办(index.html)临时身份证,这时你就会走出银行,自己前往***局,地址栏变为index.html.

forward:请求转发:服务器行为,地址栏不变。举例:你把钱包落在出租车上,你去警察局(forward.jsp)报案,警察局说钱包落在某某公司的出租车上(index.html),这时你不用亲自去找某某公司的出租车,警察局让出租车自己给你送来,你只要在警察局等就行。所以地址栏不变,依然为forward.jsp

创建一个以JDBC连接数据库的程序,包含7个步骤:

(1)加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String className)实现。
(2)提供JDBC连接的URL: 连接URL定义了连接数据库时的协议、子协议、数据源标识。
(3)创建数据库的连接:要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。
(4)创建一个Statement要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型:
        <1>执行静态SQL语句。通常通过Statement实例实现。
        <2>执行动态SQL语句。通常通过PreparedStatement实例实现。
        <3>执行数据库存储过程。通常通过CallableStatement实例实现。
(5)、执行SQL语句: Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute
(6)、处理结果:两种情况
        <1>执行更新返回的是本次操作影响到的记录数。
        <2>执行查询返回的结果是一个ResultSet对象。
(7)关闭JDBC对象:操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声 明顺序相反:<1>关闭记录集 <2>关闭声明

12. 

JVM内存配置参数: “-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3”
-Xms -Xmx:分别设置堆的最小值和最大值,如果要设置成堆的大小可变,那么可以将最大值和最小值设置成不一样,如果要将堆大小固定,那么只需将最大和最小值设置成一样的就行。
  jvm中分为堆和方法区、 堆又进一步分为新生代和老年代、方法区为永久代
  堆中区分的新生代和老年代是为了垃圾回收,新生代中的对象存活期一般不长,而老年代中的对象存活期较长,所以当垃圾回收器回收内存时,新生代中垃圾回收效果较好,会回收大量的内存,而老年代中回收效果较差,内存回收不会太多。
  基于以上特性,新生代中一般采用复制算法,因为存活下来的对象是少数,所需要复制的对象少,而老年代对象存活多,不适合采用复制算法,一般是标记整理和标记清除算法。
  因为复制算法需要留出一块单独的内存空间来以备垃圾回收时复制对象使用,所以将新生代分为eden区和两个survivor区,每次使用eden和一个survivor区,另一个survivor作为备用的对象复制内存区。
综上:
-Xmn设置了新生代的大小为5120m,而-XXSurvivorRatio=3,所有将新生代共分成5分,eden占三份,survivor占两份,每份1/5

13. 

运算符参数传递
与运算符&:保持不变的位,要用 1 去进行&运算;要清零的位用 0 进行&运算
或运算符|:保持不变的位,要用 0 去进行|运算;要置一的位用1进行|运算
异或运算符^:相同是0,不同是1.
保留符号位的右移运算符>>: 向右移一位相当于整除2

14. 参数传递

在方法调用运行时,首先对实在参数列表从左到右依次计算各个实在参数的值,然后在运行栈中为该方法的所有的形式参数变量分配空间,接着再为该方法体中所有其他局部变量在运行栈中分配空间,最后将已计算出来的各个实在参数的值抄送到相应的形式参数变量空间之中。这一切做完后,方法调用才开始执行方法体中的第一条语句。一旦运行完成,自动从运行栈撤消该方法的所有信息,因而该方法在运行栈中为形式参数及局部变量分配的空间也就自动撤消。

15. 命名规范

(1) 类名和接口名:首字母大写,如果类名由几个单词组成,采用陀峰标识,即每个单词的首字母大写,其余字母小写,例如,HelloWorld。
(2) 方法名和变量名:首字母小写(构造方法除外),如果方法名或变量名由几个单词组成,那么除第一个单词外,其余每一个单词的首字母大写,其他字母小写,例如,toString()。
(3) 包名:采用小写形式,例如,org.innerclasses.anonymous。
(4) 常量名:采用大写形式,如果常量名由几个单词组成,单词之间以下划线“_”隔开,例如,final int VALUE_ONE = 9。

16.

在类的static方法中,是不能使用this的。这是因为类方法是一直存在,随时可用的,而此时可能该类一个对象都没有创建,自然this也就不存在。

posted @ 2022-03-14 17:33  Si_wuxie  阅读(34)  评论(0编辑  收藏  举报