1. goto,const为java的两个保留关键字,无任何应用语法。因此从不使用。  

    goto 使用循环标签:if,break out,here实现goto的功能。

2. 标识符:可由字母数字下划线,$,¥ 组成,首字符不能为数字,不能与关键字相同,不能和字面常量相同。

  注意:尽量不要使用$,作为标识符。 

3.   关于一些特殊字符的转义:一些字符在java语言规定中有它自己的含义。例如:双引号""为定界符。如果想使用它但并不是作为定界符,就必须转义。

4. 关于字面常量。

  ①  true,false,null为三个字面常量,而不是关键字。

     true,false是boolean类型的字面常量。

     null是引用类型的字面常量。

  ②  int i = 1;

     这里的1是整型字面常量,把1分别赋值给给byte,char,short类型的变量,编译是不会出错的。本来java语言规定将int类型的变量赋值给比int类型低的类型

     必须要进行强制转化的。但是这种情况是个例外。 

 public class OneToSCB {
  //没有任何编译错误
public static void main(String[] args) {
byte b = 1;
char c = 1;
short s = 1;
int i = 1; } }

   ③   对于②中提到的,还有下面的情况

public class OneToSCB {

    public static void main(String[] args) {
int i = 1;
//byte b = i; //编译不会通过,需要进行强制类型转化
byte b = (byte)i; //需要进行强制类型转化才可以通过编译 } }

   ④   对于②中的特例书上说只适用于变量赋值,对于方法调用是无效的。理由是当你将整型字面常量传递给一个重载的方法,

      这个方法重载形参为short和long,如果允许方法调用,则无法判断是扩展为long还是收缩为short。但实际上并不是这样的。  

public class OneToSCB {
public static void transformation(){
char c = 1;
short s = 1;
int i = 1;
byte b = (byte)i;
} public static void deal(short var){
System.out.println("deal:int");
} public static void deal(long var){
System.out.println("deal:long");
} public static void deal(byte var){
System.out.println("deal:byte");
} public static void deal(int var) {
System.out.println("deal:int");
} public static void main(String[] args) {
OneToSCB.deal(10); }
}

    上面的方法调用传递的实参10可以准确的匹配到形参为int类型的重载方法。因此控制台打印:deal:int

    当去掉形参为int类型的重载方法时,控制台打印:deal:long 。即把整型字面常量10扩展为long类型,而不是收缩为short类型。

    原因大概也就是编译器为了安全考虑,防止数据的精度损失。

 5。关于编码

    ①计算机只认识0和1,但是现实生活中是有很多字符去需要表示的。因此需要把这些字符映射成为计算机可以识别的0和1。

    ②ASCII:把英文字符和一些标点符号编码到数字上的编码方法。如:把a编为97,把b编为98。

         ASCII只规定了128个数字,因此只能编码128个字符。

    ③Unicode:把所有字符和标点都编码到数字上,且为每种语言的每个字符都设定了统一并且唯一的二进制编码。

          例如:把a编为10002,具体的编码方法已被国际标准规定好了。

           Unicode字符集编码表实例(从知乎上看到的一段解释):

            I    0049                        I    0000 0000 0100 1001

            t    0027    对应到计算机中的存储为       t    0000 0000 0111 0100

            知    77e4                      知     0111 0111 1110 0101

            乎      4e4e                      乎     0100 1110 0100 1110

            可看出了Unicode编码对应到计算机中的存储共占16字节,但中英文有明显的区别。英文前9位都为0,但是依然占据存储空间,

            产生了浪费,因此就有了后面的UTF-8编码。

   ④UTF-8:是对Unicode字符集进行编码的一种编码方式。

    编码规则为:单字节的字符。第一位前一位设为1。对于英文文本,UTF-8只占一个字节,与ASCII码相同。

          n个字节的字符(n>1)。第一个字节前n为设为1,第n+1位设为0。第二个字节和后面所有的字节前两位都设为 1 0,

          其余位置按顺序填充字符的Unicode编码。

          即:

          单个字节   xxx xxxx

          2个字节    110x xxxx     xx xxxx

          3个字节    1110 xxxx     xx xxxx   xx xxxx

          四个字节   1111 0xxx    xx xxxx   xx xxxx    xx xxxx

    则上面采用UTF-8编码为

            I    0100 1001

            t      0111 0100

             知     1110 0111    01 1111   10 0101

             乎      0100    11 1001   00 1110

6.增强for循环

  ① 尽量使用增强for循环。但是是有缺陷的。  

      只能顺序访问

      一次访问所有元素

      无法访问指定元素

  ②  加强for循环底层是通过基本 for 循环实现的。

  ③  加强for循环右侧变量必须为数组或者Iterable类型。因为使用增强for循环操作其他类型时,编译器会把对应的增强for循环写为一下形式

   for(Iterator it = (Iterator) obj.iterator(); ; ){

   }

    因此如果你不是Iterator类型,就没有iterator方法。就不能使用增强for循环。

    例如一下代码就不能通过编译:因为Map没有实现Iterable接口。

 import java.util.List;
import java.util.Map;
class Person{ }
public class EnhanceFor {
public static void main(String[] args){
Map<String,Person> ps = new HashMap<String,Person>();
/* 不能通过编译
for(Person p : ps){
System.out.println(p);
} */ }
}

    这样对于像Map这样不是Iterable类型的类,如果想要使用增强for循环,可以让这个类去实现Iterable接口,然后实现iterator方法即可。

7.   自增自减运算符

    ① 对于"++" 运算符,编译器采用贪心规则:尽量结合更多有效的符号,但是不管是否符合语法规则。

    例如:

 public class ZiZeng {
public static void main(String[] args) {
int i = 1;
int i2 = 2;
int i3 = i+++i2;
System.out.println(i3); }
}

    运行结果:

      3

      

    但是下面这样就不能通过编译:

       int i4 = i--i2;   //本来的目的是 int i4 = i-(-i2);

    ② 前置++和后置++的真正区别:不管是前置还是后置都是先将变量的值加1,然后在进行计算。

                   真正的区别在于前置++是将变量的值加1后使用增值后的变量进行计算。

                   而后置++是先将变量值赋值给临时变量,接下来对变量的值加1,然后使用临时变量的值做运算

     实例1:int i = 2;

          int j = ++i * 30;

          编译器的处理如下:

         int i = 2;

i = i + 1;

         int j = i * 30;

     

     实例二:int i = 2;

         int j = i ++ * 30;

          编译器的处理如下:

         int i = 2;

int temp = i;

         i = i +1;

         int j = temp * 30;

    

Java深入解析读书笔记(一)的更多相关文章

  1. 《深入java虚拟机》读书笔记之垃圾收集器与内存分配策略

    前言 该读书笔记用于记录在学习<深入理解Java虚拟机--JVM高级特性与最佳实践>一书中的一些重要知识点,对其中的部分内容进行归纳,或者是对其中不明白的地方做一些注释.主要是方便之后进行 ...

  2. JAVA编程思想读书笔记(五)--多线程

    接上篇JAVA编程思想读书笔记(四)--对象的克隆 No1: daemon Thread(守护线程) 参考http://blog.csdn.net/pony_maggie/article/detail ...

  3. JAVA编程思想读书笔记(四)--对象的克隆

    接上篇JAVA编程思想读书笔记(三)--RTTI No1: 类的克隆 public class MyObject implements Cloneable { int i; public MyObje ...

  4. JAVA编程思想读书笔记(三)--RTTI

    接上篇JAVA编程思想读书笔记(二) 第十一章 运行期类型判定 No1: 对于作为程序一部分的每个类,它们都有一个Class对象.换言之,每次写一个新类时,同时也会创建一个Class对象(更恰当的说, ...

  5. JAVA编程思想读书笔记(二)--容器

    接上篇JAVA编程思想读书笔记(一) 第八章.对象的容纳 No1: java提供了四种类型的集合类:Vector(矢量).BitSet(位集).Stack(堆栈).Hashtable(散列表) No2 ...

  6. 《大型网站系统与Java中间件》读书笔记 (中)

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 回顾上一篇: <大型网站系统与Java中间件& ...

  7. Activity源码解析 - 读书笔记

    1. Activity启动 Activity是一个比较好的模板方法模式.在Android系统启动时,第一个启动的进程是zygote进程,然后由zygote启动SystemServer,再后就是启动AW ...

  8. 《深入java虚拟机》读书笔记之Java内存区域

    前言 该读书笔记用于记录在学习<深入理解Java虚拟机--JVM高级特性与最佳实践>一书中的一些重要知识点,对其中的部分内容进行归纳,主要是方便之后进行复习. 运行时数据区域 Java虚拟 ...

  9. Java并发编程读书笔记(一)

    ----------------------------------------------<Java并发编程实战>读书笔记-------------------------------- ...

随机推荐

  1. Android:创建文件或文件夹以及获取sd卡根目录

    目录结构: 功能,可以根据录入的目录或者文件夹生成相应的文件或者文件夹 首先需要添加一个权限: <uses-permission android:name="android.permi ...

  2. [转]给Linux系统管理员准备的Nmap命令的29个实用范例+ tsysv 系统服务器管理器

    原文链接:http://os.51cto.com/art/201401/428152.htm Nmap即网络映射器对Linux系统/网络管理员来说是一个开源且非常通用的工具.Nmap用于在远程机器上探 ...

  3. IOS SWIFT 网络请求JSON解析 基础一

    前言:移动互联网时代,网络通信已经是手机端必不可少的功能.应用中也必不可少地使用了网络通信,增强客户端与服务器交互.使用NSURLConnection实现HTTP的通信.NSURLConnection ...

  4. cocos2d-x游戏开发系列教程-坦克大战游戏之子弹和地图碰撞

    上篇文章实现了坦克与地图碰撞的检测, 这篇我们继续完成子弹和地图的碰撞检测. 1.先设计一个子弹类Bullet,如下所示: class Bullet : public CCSprite { publi ...

  5. 浙江大学PAT上机题解析之3-05. 求链式线性表的倒数第K项

    给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字. 输入格式说明: 输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理). 输出 ...

  6. Tuxedo入门学习

    中间件介绍: 介于客户机和server之间的夹层,突破了传统的c/s架构,为构建大规模,高性能,分布式c/s应用程序提供了通信,事物,安全,容错等基础服务,屏蔽了底层应用细节,应用程序不必从底层开发, ...

  7. Amlogic开关机按键功能实现

    在做AMlogic项目的时候,配置按键后,发现电源键仅仅能关机,不能开机,非常是郁闷 后来发现是漏掉了一个地方没有配置,firmware/arc_power/irremote2arc.c 这个文件中面 ...

  8. VC++编程之字符串解惑--Unicode & MBCS

    VC++中的字符串用起来着实让人难受,LPTSTR.LPCTSTR.LPCSTR.LPCWSTR.LPSTR.WCHAR.CString._T()和L彼此之间的互相转换更是头痛.根据使用经验和MSDN ...

  9. 关于callContext

    coding们肯定有这种需求,在程序中,方法一级级调下去,比如A->b->C->D.... ->Z.在调用过程中,希望在调用函数之间传递一些数据,常见的是将特定的数据从高往低处 ...

  10. 云计算被视为继大型计算机、个人计算机、互联网之后的第4次IT产业革命,顺应了当前各行业整合计算资源和服务能力的要求(转)

    云计算被视为继大型计算机.个人计算机.互联网之后的第4次IT产业革命,顺应了当前各行业整合计算资源和服务能力的要求,成为引领当今世界信息技术变革的主力军.越来越多的金融企业认识到只有与云计算结合,才能 ...