Java学习笔记20180407

正所谓尽信书则不如无书,学Java也不能只读某一个视频教程,除了网上多如牛毛的Java书籍和教程,Java官方开发文档才是正道源泉,因此,我今天溯本归原,从官方文档读起,了解Java设计者的本意,先用一张文档首页截图镇个楼。

Java学习笔记20180407_第1张图片
Java Tutorials

文档还是按照几个大块来讲的,正文还有范例并且讲解得很细很完整,每一部分会作总结,接着带有少量Question和Excercise,不小心还会中招。

下面将我今天读完的部分所掌握的东西与大家分享一下。

1.操作符的运算优先顺序,简言之,是一元运算符>二元运算符>三元运算符。文档给了一道题目int x=10, int n=x++%5;问n=?

++是自增运算符,为一元运算符,%为取余运算,是二元运算符,=是赋值运算符,比前两者优先级都低,还有一点需要考虑,赋值运算是从右至左,因此运算顺序:

因此是x%5先计算出结果为0,传递给n,然后x再自增为11。


2.8种基本数据类型的默认值,为0,null或false。但是要想看到这个默认值(即不事先针对变量赋值),需要先将其声明为Class中有成员变量,并通过Object.Field的方式调用才能被编译器初始化为默认值。否则,直接用int x; 然后System.out.println(x)的方式显示会报错。

相应的截图如下,实验检验与文档说明是一致的。

Java学习笔记20180407_第2张图片
8 primitve data default value

另外,视频教程和官方文档都提到了数值中加下划线这种操作,比如Long型数值3141592657345L,为了便于快速知道它是多大的数,类似于之前在Excel中显示千位分隔符一样,程序员们也喜欢每隔三位加一个_,变成3_141_592_657_345L,具体的要求有:

1)_不可以放在小数点前,如 3_.14F

2)_不可以放在L或F数据类型标识字母前,如9999_L

3)_不可以放在头和尾,如52_和0x_52

4)_不可以放在前缀里,如0_x52

其实我们只要记住_是用于三位三位分开数字的就OK了。


3.Array数组,Java提供了一个数组运算的方法,比如System.arrayCopy(Object src,int srcPos,Object dst, int destPos, int length),这与Excel函数里的各个参数非常像,有点像Mid函数。5个参数分别指向源数组,源数组取样位置,目标数组,目标数组取样位置,取样长度。

当然,我看到后面一段话,觉得这个函数略复杂,还是用后面的比较好,java.util.Arrarys.copyOfRang(copyfrom,pos,length);这简直与Mid函数是一样一样的。

还有其他后面可能用得着的方法,比如ArraryA.equals(ArrayB)比较两个数据 , fill(ArrayB)填充数组, sort(ArrayB),对数组各元素按升序排列。

4.Operators,expression, statement,blocks这几个概念的层层关系。

Expression=variables+operators+method invocations,表达式类似于一条公式,可以用数值,运算符和方法引用组成

Statement是一条执行语句,跟expression有时只差一个;它可以是赋值语句,x++,x--;这种简单语句,也可以是方法调用,创建对象,声明语句,或是control flow语句等。

而Block是用{}包含的一段代码块,包含某一个功能实现的相关语句。


5.控制语句中break,continue,return的用法

continue;是用于跳过本次循环的后续代码,而进行下一次循环,如果continue是用于嵌套循环中的内层循环,则使用continue后只会跳到内层循环的下一次。

break;是跳出循环,相当于在某个游戏局中被踢出,不再执行循环体代码。

当然,这两者都可以配合Label使用,label应放在循环体之前,如break testlabel; continue testlabel;这里它们就会跳到标签处,break用于跳出循环,而continue则会从标签处继续执行。

return用于返回,一般是用于返回值,如return a value;一般是放在public int method(int m){..... return x;}这种需要返回值的方法中,也可以直接用return;但是并不能返回任何东西,放在代码段中只是为了跳过后面的代码而已。


6.类,方法和对象的访问权限控制

Java官方文档画了一张表格,我觉得很好,就截图放下面吧!

用我的语言解释一下,这张表中放了4种权限范围,

1)最宽松的是public,即公共文件,类似于公司EtQ文件系统中的public domain,大家都可以访问,读取与修改。

2)Protected要严一些,World是不能访问的,类似于Business Use,其他BU无法访问。

3)什么都不写,默认是第三种情况,即父类的子类也无法访问父类的方法和属性。只能父类自己访问

4)Private是最严格的,只有父类自己访问,package(将不同的类打包在一起的集合)也不可以访问,类似于同一小组人也不能访问,只能自己访问。

Java学习笔记20180407_第3张图片
Access Levels

与之配套的是成员可见性表格,与上面的权限是一样的,即类所包含的方法和其成员对象也是不能被随便访问和修改的,这体现了Java的安全和隐藏实现细节的机制。

Java学习笔记20180407_第4张图片
Visibility

我们在写代码时,要注意权限控制(因为在你的代码里,你就是管理员,God),所以要清楚2点(Java官方写的,不是我):

1)知道我可以调用哪些类

2)知道每个成员变量和方法应该设置什么样的访问等级


7.Static关键字,我觉得这个关键字有点绕,但仔细理解一下还可以。相比于Variable,Java为每个不同的变量分配了内存和地址,但Static标记的数据,Java只给分一个内存单元,我们可以利用这一点做点事情。比如建立一个自行车编号,记录一共卖了多少自行车,相关的代码如下:


Java学习笔记20180407_第5张图片
Keyword Static


Java学习笔记20180407_第6张图片
Keyword Static


8.输出格式管理,这个算一个小补充,在我看到现在的示例代码中,基本没见过。使用System.out.println或是使用System.out.format都可以,很多我们都很容易理解。

%s,%c,%b,%d,%x,%o,%f,分别对应基本数据类型String,char,boolean,d对应十进制,x对应十六进制,o对应8进制,f对应float,

%a表示十六进制浮点类型,%e对应指数,%%对应百分比显示。

最常见的是%n换行符,但\n也能换行,还有不常用的是%g通用浮点类型,%h对应散列码(那是什么鬼?下次Google下),还有%tx对应日期与时间类型(Java没有把日期与时间作为基本数据类型)。


以上就是今天的笔记内容,明天我会继续看官方文档,做完练习后,再回到视频教程中去,因为视频教程的练习题更加有意思一些。谢谢的大家的支持。

你可能感兴趣的:(Java学习笔记20180407)