本帖最后由 刘凯 于 2013-4-25 23:52 编辑
斑竹大大 怂恿我总结下 java基础的东西,
其实吧我感觉,想进黑马的同学,在自学的过程中都肯定在自己总结着, 所以视频上的东西我想我们大家都是一样的,都是菜鸟嘛,而且自个总结的应该才是最适合自己的,
二来,最近也时间比较紧,由于赶课程进度和赶毕业设计,所以也就没有参加版主大大的活动,不过我想了下,还是把自个学习中的一些自己的视频外的所获拿出来分享下,技术大牛们不要嘲笑就好呀,作为菜鸟,也只是在互相分享一些小收获
可能一时想不全乎,先想到什么写的啥吧,
1, 是JDK7的一些新特性 这个我以前发过个帖子
传送门:http://bbs.itheima.com/thread-41598-1-1.html
不过有一点
基础加强视频里 说JDK7有个新特性是
Map map = {name:"zxx",age:"lhm"};可以定义个Map
在第32个视频 22分钟 而我现在就是JDK7,试过了不行, 还请能够编译成功童鞋指教哈
2,三元运算符的一个,非原创 ,感觉很好,就收藏了下 ,一个小知识点
public static void main(String[] args) { inti=99; System.out.println("99999判断结果:"+(true?'a':99999)); System.out.println("-1判断结果 :"+(true?'a':-1)); System.out.println("0判断结果 :"+(true?'a':0)); System.out.println("65535判断结果:"+(true?'a':65535)); System.out.println("65536判断结果:"+(true?'a':65536)); System.out.println("i判断结果 :"+(true?'a':i)); }
涉及到了三目运算中类型自动提升的一些问题,运算结果如下:
99999判断结果:97 -1判断结果 :97 0判断结果 :a 65535判断结果:a 65536判断结果:97 i判断结果 :97
总结出了以下的结论:
(1)假如表达式1和表达式2具有相同的类型,那么整个条件运算符结果的类型就是这个类型。
(2)假如一个表达式的类型是T,T是byte或short或char,另一个表达式的类型是int类 型 的常量表达式,而且这个常量表达式的值是可以用类型T表示的(也就是说,常量表达式的值是在类型T的取值范围之内),那么整个条件运算符结果的类型就是T。
(3)除以上情况外,假如表达式1和表达式2的类型不同,那么将进行类型提升,整个条件运算符结果的类型就是提升后的类型
根据上述结论可以看出,参考结论(2)char类型的取值范围为0-65535,在char取值范围中均会返回char类型的值,所以输出a。-1和65536超出了char的取值范围,所以类型提升为int型,输出a对应的ascii码。最后一条判断,已经明确了i为int类型,所以根据结论三,类型提升,输出结果97。
3,是final的一个小知识点,也是非原创
final使得被修饰的变量"不变",但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义:引用本身的不变,和引用指向的对象不变。
引用本身的不变:
final StringBuffer a=newStringBuffer("immutable");
final StringBuffer b=newStringBuffer("not immutable");
a=b;//编译期错误
引用指向的对象不变:
final StringBuffer a=new StringBuffer("immutable");
a.append(" broken!"); //编译通过
可见,final只对引用的“值”(也即它所指向的那个对象的内存地址)有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。至于它所指向的对象的变化,final是不负责的。这很类似==操作符:==操作符只负责引用的“值”相等,至于这个地址所指向的对象内容是否相等,==操作符是不管的。
理解final问题有很重要的含义。许多程序漏洞都基于此----final只能保证引用永远指向固定对象,不能保证那个对象的状态不变。在多线程的操作中,一个对象会被多个线程共享或修改,一个线程对对象无意识的修改可能会导致另一个使用此对象的线程崩溃。一个错误的解决方法就是在此对象新建的时候把它声明为final,意图使得它“永远不变”。其实那是徒劳的。
4, 一个键盘录入的小知识点
在毕向东基础视频里边录入流一直都是用这 BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
其实还有一个就是Scanner这个类,
如: Scanner sc = new Scanner (System.out);
sc.next();//阻塞方法 从键盘输入一个字符串
其他方法 还有 nextInt nextLine 等 。
具体可以查看API的Scanner 类
拿出这个来是因为,我感觉这个键盘输入的代码,比上一个要简便的多,而且不必处理异常和关闭流 所以相对来说简洁一些
5,切割字符串的一个小知识点
String类中的一个split这个方法可以将字符串按指定的字符来对字符串进行切割 ,如果指定的切割位置是不同字符的话,也可以用正则来实现
如:
String str1 = "sd.da,fr";
String[] strs = str1.split("[\\.,]");//就是在“.” “,”处都进行切割
System.out.println(strs.length);
除此之外还有另一个方法就是用 | 来连接不同切割的位置的字符
String[] strs = str1.split("\\.|,");
多个不同切割点类似
字数超了,所以跟着下帖哈
|