【有书共读】《疯狂JAVA讲义》读书笔记01
就是说,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):删除当前行 ……其他有待发现,也希望大家补充
