一、Statement和PreparedStatement
PreparedStatement继承Statement,PreparedStatement 实例包含已编译的 SQL 语句, 所以其执行速度要快于Statement对象。
作为Statement的子类,PreparedStatement继承了Statement的所有功能。三种方法
- execute、executeQuery和executeUpdate已被更改以使之不再需要参数
PreparedStatement尽最大可能提高性能。最重要的一点是极大地提高了安全性。
二、for循环
以下代码执行结果是(ABDCBDCB)
public class Test{
static boolean foo(char c){
System.out.print(c);
return true;
}
public static void main( String[] argv ){
int i = 0;
for ( foo('A'); foo('B') && (i < 2); foo('C')){
i++ ;
foo('D');
}
}
}
分析:
for(条件1;条件2;条件3) {
//语句
}
执行顺序是条件1->条件2->语句->条件3->条件2->语句->条件3->条件2........
如果条件2为true,则一直执行。如果条件2位false,则for循环结束
三、socket
服务器端:ServerSocket提供的实例 ServerSocket server = new ServerSocket(端口号)
客户端:Socket提供的实例 Socket client = new Socket(IP地址,端口号)
四、关键字、标识符
Java标识符命名规范是:
- 只能包含字母a-zA-Z,数字0-9,下划线_和美元符号$;
- 首字母不能为数字;
- 关键字和保留字不能作为标识符。
null是关键字,NULL不是关键字,java区分大小写。
for是关键字。
五、对线性表采用折半查找,该线性表必须(元素按值有序排列,并且采用顺序存储结构)。
必须是顺序储存结构,即数组,一次索引就可以找到中间位置。如果是链表,需要从头遍历到中间位置。
六、数组
数组大小的定义只能是整型常量 。
常用方法:
方法名 | 是否改变原数组 | 作用 | 返回值 |
---|---|---|---|
concat() | 不改变原数组 | 连接两个或多个数组 | 返回被连接数组的一个副本 |
join() | 不改变原数组 | 把数组中所有元素放入一个字符串 | 返回字符串 |
slice() | 不改变原数组 | 从已有的数组中返回选定的元素 | 返回一个新数组 |
toString() | 不改变原数组 | 把数组转为字符串 | 返回数组的字符串形式 |
pop() | 改变原数组 | 删除数组最后一个元素, 如果数组为空,则不改变数组,返回undefined | 返回被删除的元素 |
push() | 改变原数组 | 向数组末尾添加一个或多个元素 | 返回新数组的长度 |
reverse() | 改变原数组 | 颠倒数组中元素的顺序 | 返回该数组 |
shift() | 改变原数组 | 把数组的第一个元素删除,若空数组,不进行任何操作,返回undefined | 返回第一个元素的值 |
sort() | 改变原数组 | 对数组元素进行排序(ascii) | 返回该数组 |
splice() | 改变原数组 | 从数组中添加/删除项目 | 返回被删除的元素 |
unshift() | 改变原数组 | 向数组的开头添加一个或多个元素 | 返回新数组的长度 |
七、6!=1*2*3*4*5*6=720.720后面有1个0,n=10000,求n!后面有多少个0。(2499)
八、主方法
九、instanceof运算符
instanceof运算符能够用来判断一个对象是否为:
- 一个类的实例
- 一个实现指定接口的类的实例
- 一个子类的实例
十、常量池
Byte,Short,Integer,Long,Character这5种整型的包装类也只是在对应值小于等于127并且大于等于-128时才可使用常量池,因为它们只占用一个字节(-128~127);
再者Integer.valueOf方法中也有判断,如果传递的整型变量>= -128并且小于127时会返回IntegerCache类中一个静态数组中的某一个对象, 否则会返回一个新的Integer对象。
十一、短路与&&
以下代码的运行结果为:531
public class Test{
public static void main(String[] args){
int x = 0;
int y = 0;
int k = 0;
for (int z = 0; z < 5; z++) {
if ((++x > 2) && (++y > 2) && (k++ > 2)){
x++;
++y;
k++;
}
}
System.out.println(x + ”” +y + ”” +k);
}
}
分析:第一次运行到if后,++x > 2不满足,&&后面的就不进行比较了。
当x加到3后,才开始比较++y > 2
十二、嵌套类
使用嵌套类,其中有几个令人信服的理由:
- 加强封装—考虑两个顶级类,A和B,如果B需要访问A的private成员,通过在A类隐藏B类,那么即使A的成员声明为private,那么B也可以访问它们。更多的是,B本身也可以隐藏于外部。
- 更可读性,可维护性的代码—在顶级类里嵌套小类,让代码更靠近使用的地方。
十三、字符串
java中 String str = "hello world"下列语句错误的是?(1、2、3)
- str+=' a'
- int strlen = str.length
- str=100
- str=str+100
str += 'a' 和 str +="a"都是对的,但是如果a前面加一个空格,那么只能用双引号了,代表字符串。
数组有length属性,字符串只有length()方法 。