【有书共读】《疯狂JAVA讲义》读书笔记01

《疯狂Java讲义》第一周笔记01

1.编译语言和解释语言理解,摘自李刚老师的《疯狂Java讲义》第三版:

就是说,Java和.net都是编译型有事解释型语言。编译型就是根据不同平台编译成不同的可执行机器码,编译过程中会进行很多的优化,比如:字符串自动连接以及各种常量替换和连接多个文件生成一个文件等等,而解释型只需要能被解释器解释就可以了,而不需要编译,比如说:html是解释型语言,不需要经过编译,是什么浏览器就解释什么。其实感觉二进制码也是一种解释型语言,而cpu就充当解释器。java和.net都需要虚拟机(也可以认为是解释器)来运行,先都是经过编译器编辑成VM能解释的中间语言(期间会进行很多优化和各种连接,其实都是为了方便程序员写代码,减少工作量或者说是便于程序源代码维护而屏蔽的工作,都由编译器后台编译来帮程序员完成的工作,比如:常量的替换,在编译的时候,凡是使用到常量的地方,编译器都会直接用常量的值直接替换上去,跟变量不一样),然后执行的时候,中间语言就被VM直接解释成当前平台的机器代码(毕竟不同平台的机器码肯定是不一样的),最后cpu再解释机器码(这句可以忽略不看)。所以说java和.net是半编译半解释型语言。

2.对象初始化

①引用对象可以直接声明同时使用{}初始化,例如:


1 var stu = new Student()2  {3 Name   = "",4 StuNo = "20102100104"5 };

而java这样是不行的,java要像以下这样才能初始化(或者定义一个带参数的构造器来初始化):

            Student stu = new Student();            stu.Name = "";            stu.StuNo = "20102100104" ;


并且java不可以使用var这种自动判断类型的功能,比.net弱多了。

2.java和.net不会为局部变量默认初始化,局部变量必须先初始化才能使用,不然编译不过,但是会为成员变量默认初始化(int默认为0,bool默认为false,引用类型默认为null……)。

3.java没有虚函数的概念,而.net有虚函数的概念(函数前面加上关键字Virtual)。因为java里面的函数默认全部都是Virtual函数,也只能是Virtual函数,估计是为了突出java面向对象的思想,毕竟面向对象很重要的一个特点就是“多态“,但是这样强制加上去反而不够灵活了,用父类引用调用方法,如果父类,子类都有同一个方法,这时候,在java里面就调用不了父类的方法了,而.net中只要该方法不是Virtual函数的话,调用的就是父类的方法。因为在.net中,如果不是Virtual函数的话,是根据引用变量类型来决定调用的方法的,在编译时期就已经明确,而Virtual方法是根据引用变量指向的对象实例来决定调用的方法的,是在执行的时候才能确认调用的方法。

4.Java添加函数注释是输入“/**”,然后回车,而.net添加函数注释是输入"///"按回车,如下:

.net

    /// <summary> /// create by ismallboy /// </summary> class Program

java


/** *  * @author ismallboy * */public class ScopeTest {

顺便再说几个很好用,但是很多人不知道的快捷键:

shift Enter:光标移到下一行,不管你当前光标在当前行的哪个位置,这个快捷键当真好用,而且经常用到,不用每次都要用鼠标点或者移动键盘的向下方向键;Ctrl D(android studio是Ctrl X):删除当前行 ……其他有待发现,也希望大家补充

5.Java基本数据类型,个人感觉里面的表格分类比较好,故直接Copy过来(图截取李刚老师的《疯狂Java讲义》第三版)


6.关于字符集的知识,个人感觉李刚老师的解释也比较到位,当然详细自己可以查找资料去好好理解,要理解好编码格式和解码格式,计算机都是只能保存二进制的内容的,就是用二进制来保存各种各样的数据,比如:多媒体,文字,图片等等,都是按照一定的编码格式编码,然后计算机只是保存该种编码格式的编号的二进制格式,解码的时候,也就是你要看的时候,也只能按照编码的时候的那种编码方式(或者兼容编码的时候的编码格式的其他编码方式也行,有点拗口,原谅我语文是数学老师教的)来解码才能正常显示,不然看到的也就是一坨的乱码而已,其实也就是把计算机保存的二进制转成编码表上面的编号,找到对应的字体显示出来而已,当然了这只是说文字,多媒体也有自己的编码格式,自己找资料理解了,如下(图截取自李刚老师的《疯狂Java讲义》第三版)

7.数组,也是一种类型,而且是一种引用类型,以前个人很不喜欢int[100] a;这种定义方式,因为以前c 教材是主张试用int i[100] ;这种方式的,发现java里面主张这种方式一时还不是很习惯,看了《疯狂java讲义》里面的讲解,说可以将int[]视为一种类型,就像String一样看待,这突然就豁然开朗,觉得很好理解了,int[] i;的意思就是定义了一个int[] 类型的i变量,你看,多好理解,二位数组的话就int[][],也把他看作一种类型,int[][] a;就是定义了一个int[][]类型的变量,的而且李刚老师说,java里面都是一维数组,不存在多位数组,解释的也很有道理。

第一天笔记暂时总结到这,下周继续。
#Java工程师#
全部评论

相关推荐

海螺很能干:每次看到这种简历都没工作我就觉得离谱
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务