Core Java For The Impatient

1.基本的编程结构

1.Key Points

  1. 在Java,所有的方法必须在类声明。非静态方法只能在所属类的对象上调用。
  2. 静态方法不是通过对象调用。程序从静态的main方法开始执行。
  3. Java有8个基本数据类型;5个整型、2个浮点型、1个布尔型。
  4. 字符串对象是字符序列,是UTF-16编码中的Unicode编码点的序列。
  5. 使用System.out对象,终端窗口显示输出。绑定System.in的Scanner可以读取终端输入
  6. 数组和集合用来收集相通类型的元素。

2.容易忽视的点

  • 编译和运行:javac命令将Java源代码编译成中间代码(字节码),并将他们保存到类文件。Java命令启动JVM,JVM加载类文件并执行字节码。(一旦编译完成,可以在任何JVM上运行)。

  • Main方法System.out是对象,名为PrintStream类的实例,其有println和print等方法,为实例方法。命令行参数String[] args ,程序调用 java Greeting -g cruel world args[0]为-g, cruel和world 也是数组参数。

  • 部分数据类型

类型 存储需求 范围(包含该值)
int 4byte -2147 483 648 - 2147483647(超过20亿) 2^32 - 1
long 8byte -264-264-1
short 2byte -32768-32767
byte 1byte -128-127
float 4byte ±3.40282347E+38F(6-7位有效数字)
double 8byte ±1.79769…(15位有效数字)
  • int最实用,MIN_VALUE和MAX_VALUE表示最小最大。特别多(超过32位,比如人口),用long,不够用用BigInteger。byte和short,当存储空间珍贵的底层文件处理,大数组处理。Byte.toUnsignedInt(b)方法,可以获得0-255的数值。

  • 以前内存稀缺,默认四个字节float,现在默认double精度。

  • Java中,整型的范围不依赖于程序所运行的机器。(原则是面向字节码),C/C++,依赖编译程序的处理器。

  • Double.POSTIVE_INFINITY正无穷,否则负无穷。NaN非数值。

  • char型:描述Java使用的UTF-16字符编码中的“编码单元”。

  • 1_000_000_000 下划线阅读更容易,编译器会直接删除。

  • 0.0009765625 = 2^-10 可以写成0x1.0p-10,在十六进制可以使用p,而不是e,即使数字用十六进制书写,指数还是用十进制。

  • 非数值被认为是彼此不同的,是性质上属于而不是数字相等。if(x == Double.NaN) 不可用,而是if(Double.isNaN(x)),isInfinite() 判断是否正负无穷大,浮点数不适合金融计算,有误差。【因为浮点数在计算机使用二进制系统表示,1/10没有精确的二进制表示,如果需要精确,用BigDecimal类】

  • 变量:java强类型语言,某个具体类型的值。在方法中声明变量,必须初始化,否则编译错误。

  • 常量:final赋值不能变化,方法外声明用static,System类声明了一个常量public static final PrintStream out,可以在任何地方使用System.out,少有的几个常量没有大写的情况之一。一组相关常量,定义枚举 enum Weekday{MON, TUE, WED,THU,FRI,SAT, SUN}; 使用 Weekday startDay = Weekday.MON;

  • 算术操作,注意点:+比<<(算术移位)优先级高,3 + 4 <<5 的运算顺序是(3+4)<< 5,操作符-=是右结合,i-=j-=k的意思是i -= (j-=k)

  • 基本运算:整数除以0会导致异常,如果没有捕获异常,程序会终止。浮点数除以0或产生无限值或者NaN(正负无穷),不会导致异常;判断奇偶数%2,但是如果n为负数,n%2 = -1,当操作数为负数,谨慎使用%。

1.经典余数法:
for (int i = -2; i < 3; i++) {if (i % 2 == 1 ) {System.out.println(i + "为奇数");} else if (i % 2 == 0) {System.out.println(i + "为偶数");} else {System.out.println(i + "i % 2=" + i % 2);}
}
弊端:操作数是负数,偶数正常==0,奇数则为-1,一般无法判断。
结果:
-2为偶数
-1i % 2=-1
0为偶数
1为奇数
2为偶数
2.用二进制与1的方法判断
if ((i & 1) == 1) {System.out.println(i + "为奇数");
} else  {System.out.println(i + "为偶数");
}
结果:
-2为偶数
-1为奇数
0为偶数
1为奇数
2为偶数
  • 数字类型转换:double和float和long具有单个强制另一个数字转化同类型的能力,其余都为int类型。比如 J + 1 为74,char next = (char) ('J' + 1); cast转换如果越界只有最后一个值保存下来。

  • 操作符n = n | 0xF 将最低四位设置为1,n = n^0xF对n进行反转,参数比特位反转:~0XF= 1....10000 >> 以0替换前面的位,而>>>以符号位扩展为最前面的位。

//0xF = 15
int a = 0x6;     // 0110
int b = a | 0xF; // 1111  15
int c = a ^ 0xF; // 1001  9
int d = ~ 0xF;   //  1000  16
d >> 1;     // -8
d >>> 1; // 2147483640
  • 大数 :valueOf转化,操作大数要用方法调用。

  • 字符串顺序比较:first.compareTo(second),如果前者排在后者的前面,返回负整数,后面则为正整数,否则为0。【两个字符的unicode之差】;字符串数字转换Integer.toString(n,2);// 设置基数2-n-2;

  • case:标签整数、char、byte、short、int或包装类,文字串,枚举类型值。长忘记加break,可以编译时加配置。javac -Xlint:fallthrough xxpagckage/XXClass.java @SuppressWarning(“fallthrough”)这样不会为该方法产生警告(注解给编译器或者其他工具提供信息)

  • 数组:数组和列表复制等

Arrays.copyOf(primes,primes.length);  // 新长度,可截取
ArrayList<String> copiedFriends = new ArrayList<>(friends);// 将元素传递,但是两者不会影响。(深拷贝)
ArrayList<String> copiedFriends = new ArrayList<>(Arrays.asList(names));// 变成列表
  • 二位数组:杨辉三角
private static int[][] YongHuiTri(int n) {int[][] tri = new int[n][];for(int i = 0; i < n; i++) {tri[i] = new int[i + 1];tri[i][0] = 1; tri[i][i] = 1;for(int j = 1; j < i; j++) {tri[i][j] = tri[i - 1][j - 1] + tri[i - 1][j];}}return tri;
}

二维数组快速输出:System.out.println(Arrays.deepToString(yongHuiTri));

Core Java For The Impatient-阅读笔记1.基本的编程结构相关推荐

  1. core JAVA for the impatient 阅读笔记(3) 继承

    继承一个类 实例变量和动态变量称为域,类中的域,方法和嵌套类/接口统称为类成员 反射机制:一种在程序运行期间查找类及其成员的能力 return **super.**getSalary()+bonus; ...

  2. [Core Java® for the Impatient]重载Java2

    2019独角兽企业重金招聘Python工程师标准>>> Chapter 2. Object-Oriented Programming Set(Mutator Methods)方法改变 ...

  3. java怎么重载两次_[Core Java® for the Impatient]重载Java2

    Chapter 2. Object-Oriented Programming Set(Mutator Methods)方法改变对象的状态,Get(accessor methods)方法则不: Java ...

  4. 《core JAVA for the impatient》阅读笔记(5) 泛型编程

    泛型方法 类型参数要放在修饰符之后,返回类型之前 public static <T> void swap(T[] array,int i,int j) 调用时: String[] frie ...

  5. 《core JAVA for the impatient》阅读笔记(2) lambda表达式

    lambda表达式 只有一个抽象方法的接口对象,就可以提供一个lambda表达式(函数式接口) 将lambda表达式放入类型为函数式接口的变量中,这样它就被转换为该接口的实例 list.removeI ...

  6. 《core Java for the impatient》阅读笔记(1) 基本编程结构

    第一章 基本的编程结构 System类中声明了一个常量 public static final PrintStream out 可以在任何地方使用System.out 这是少有的几个常量没有大写的情况 ...

  7. 《Java开发手册》阅读笔记(三)

    一.集合处理 1.只要覆写 equals,就必须覆写 hashCode:Set集合存储对象必须重写hashCode和equals:自定义对象作为map的key必须重写- image.png 2.Arr ...

  8. 《Java深入解析》阅读笔记二(运算符与表达式)

    ---恢复内容开始--- i+++j如何计算 +++的运算 i+++j的结合运算是:(i++)+j. 贪心规则 因为编译器极度的"贪心",所以他会尽可能多的结合有效的符号,而不管结 ...

  9. java exp5_[Core Java® for the Impatient]重载Java1

    Chapter 1. Fundamental Programming Structures 八个基本概念: 所有的Java方法都生命在类里,调用非静态的方法是基于该方法所在类的实例化的对象: 静态方法 ...

最新文章

  1. jenkins换服务器找不到包,服务器重启后Jenkins项目部分丢失问题解决方法
  2. CF1066F-Yet another 2D Walking【贪心】
  3. 工作309:selectaccount方法接收值
  4. Serverless 风暴来袭,前端工程师如何应对?
  5. 程序编程代码大全_CNC加工中心程序代码大全
  6. [Unity] 定义 Assembly 之后还要定义 Assembly Reference
  7. eclipse package explorer视图中怎么让default package不显示?
  8. Java变异出现错误:No enclosing instance of type XXX is accessible
  9. tomcat配置虚拟目录的方法
  10. python list函数使用总结_python——list总结
  11. faster rcnn fpn_Faster-RCNN详解和torchvision源码解读(三):特征提取
  12. 除了html 还有什么页面,HTML页面布局有哪些?
  13. 【Excel】数据处理与查看
  14. 分享一个Atmega128L单片机在IAR for AVR中的串口1收发数据的例程
  15. torch/utils/cpp_extension.py raise RuntimeError(message) from e
  16. 单个正态总体方差的置信区间
  17. 期权理论基础1 对冲法
  18. Resetting first dirty offset of __consumer_offsets
  19. 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
  20. 系统架构设计应考虑的因素

热门文章

  1. 霄卓机器人_机器人推动产业创新升级 央企千万投资上海霄卓
  2. c语言程序重命名,如何在C语言编程里面修改源文件名字?
  3. 浅谈一下如何避免用户多次点击造成的多次请求
  4. python3.4使用教程_python3.4使用循环的实例详解
  5. Godaddy主机修改PHP版本教程,GoDaddy主机如何在后台更改主域名最新图文教程
  6. FloTHERM XT 风冷水冷实例仿真分析视频教程
  7. background:url(../images/list01.png) no-repeat 0 center;是什么意思
  8. 《关于建立统一的城乡居民基本养老保险制度的意见》
  9. Java 二阶段 html
  10. sgu106-109