Java
+BEGIN_EXAMPLE
title: "Java Study Day (1)"
data: "2017-03-17 23:19:16"
tags: study
categories: Docs
description: "Java Study Day (1) Java 的基本程序设计结构 "
toc: true
+END_EXAMPLE
+OPTIONS: toc:nil
- 一个简单的Java程序
+BEGIN_SRC java
public class Main{
public static void main(Sreing[] args){
System.out.println("Hello World!");
}
}
+END_SRC
** Tips
- 关键字class表明Java程序中的全部内容包含在类之中
- 关键字class之后紧跟类名
- 类名的命名规则“名字以字母开头,后加字母或者数字,长度无限制,不可使用Java保留字”
- 类名的命名规范“类名是大写字母开头的名词,多个单词组成,每个单词首字母大写” -- 骆驼命名法
- 源代码的文件名必须与公共类的名字相同,并且以.java作为扩展名
- main方法必须被定义为public
- 源代码中的{},与c/c++一样,划分程序的各个部分
- Java中的所有函数都属于某个类的方法,而不是成员函数
- 因此,Java中的main方法必须有一个外壳类
- 点号(.)用于调用方法,Java使用的通用的语法是object.method(parameters)
-
注释
- //注释内容从 //到本行行尾
- /* */ 将一段比较长的注释括起来
- 以 /** 开始以 */结束,是用来自动的生成文档
- 注意:注释不能嵌套
-
数据类型
Java是一种强类型语言,所以必须声明每个变量的类型,Java中有8种基本类型,四种整型,两种浮点,一种表示Unicode编码的字符单元的字符类型char,一种表示真值的boolean类型
** 整型
| 类型 | 存储需求 | 取值范围 |
|-------+----------+--------------------------------------------|
| int | 4字节 | -2147483648 ~ 2147483647 |
| short | 2字节 | -32786 ~ 32767 |
| long | 8字节 | -9223372036854774808 ~ 9223372036854774807 |
| byte | 1字节 | -128,127 |
- 长整型数值有一个后缀L或者l
- 十六进制数值有一个前缀0x或0X
- 八进制有一个前缀0
- 从Java7开始加上前缀0b或者0B就可以写二进制数
- 同时还可以在数字字面量加下划线,只是为了易读,Java编译器会去除这些下划线
** 浮点类型
| 类型 | 存储要求 | 取值范围 |
|--------+----------+--------------------------------------------|
| float | 4字节 | +- 3.40282347E+38F 有效位数6~7位 |
| double | 8字节 | +- 1.79769313486231579E+308 有效位数15位 |
- float类型的数值有一个后缀F或f
- 没有后缀F的浮点数值默认为double类型
- double类型的数值有一个后缀D或d
- 可以使用十六进制表示,在十六进制中使用p表示指数,尾数采用十六进制,指数采用十进制,指数的基数是
- 三个特殊的浮点数值
- 正无穷大[Double.POSITIVE_INFINITY]或者Float常量
- 负无穷大[Double.NEGATIVE_INFINITY]或者Float常量
- NaN(不是一个数字)[Double.NaN]或者Float常量
- Double.isNaN(x)判断一个特定值是否不是一个数字
** char类型
char原来用来表示单个字符,如今有些Unicode可以使用一个char表示,另外一些需要两个char
| 转义序列 | 名称 | Unicode值 |
|----------+--------+-----------|
| \b | 退格 | \u0008 |
| \t | 制表 | \u0009 |
| \n | 换行 | \u000a |
| \r | 回车 | \u000d |
| " | 双引号 | \u0022 |
| ' | 单引号 | \u0027 |
| \ | 反斜杠 | \u005c |
**** 警告:Unicode的转义会在解析代码之前得到处理(注意注释中的转义)代码中的\u后面必须有四个十六进制数即使是在注释之中
**** 举例:(错误: 非法的 Unicode 转义System.out.println(g); // \user)
** Unicode类型和char类型
- 码点:指与一个编码表中某个子度对应的代码值,在Unicode标准中码点采用十六进制书写并加上前缀U+
- Unicode的码点分为17个代码级别,第一个代码级别码点从U+0000U+FFFF,其余16个级别码点从U+10000U+10FFFF
- 在基本的多语言级别,每个字符用16位表示,通常被称为代码单元
** boolean类型
boolean类型有两个值:false和true,用来判定逻辑条件,整型和布尔值之间不能互相进行转换
-
变量
- 变量初始化:
- 声明一个变量之后必须用赋值语句对变量进行显式初始化
- Java可以将声明代码放在任何位置
- 常量:
- Java中关键字final指示常量
- final表示这个常量只可以被赋值一次,一旦被赋值之后就不能被更改,习惯上常量名使用全大写
- Java中经常希望某个常量可以在一个类的多个方法中使用,通常将这些常量称为类常量,使用关键字static final设置一个类常量
- 注意类常量位于main方法外部
- 变量初始化:
-
运算符
使用strictfp关键字标记的方法必须使用严格的浮点计算来生成可再生的结果,例如public static strictfp void main(String[] args) 这是性能和计算精确度平衡的产物-
科学函数与常量
- floorMod(position + adjustment, 12)总会得到一个在0~11之间的数字
- 注意这些都在Math类之中
- 为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程序
- 如果一个完全可以预测的结果比运行速度更重要的话,使用StrictMath类
-
数值类型之间哦转换
- 如果两个操作数有double 另一个转成double
- 否则 如果其中一个是float 另一个转成float
- 否则 如果其中一个是long 另一个转成long
- 否则 两个操作数全部转成int
-
强制类型转换
- 使用(类型)
- 或者使用(int)Math.round(x)来强制得到最接近浮点数的整数
- 注意如果将一个数值从一种类型转换到另一种类型,并且超过了目标类型表示范围,结果会截断成为一个完全不同的值
-
结合赋值和运算符
- 可以在赋值中使用二元运算符例如:x += 4 => x = x + 4
-
自增和自减运算符++n;n++;--n;n--;
-
关系和boolean运算符
- ==;!=;&&;||;>;<;<=;>=;
- condition ? expression1 : expression2
-
位运算符
- & ("and") | ("or") ^ ("xor") ~ ("not")
- & 和 | 不使用“短路”
- <<位模式左移,>>位模式右移,>>>运算符会使用0填充高位,>>会使用符号位填充高位
-
枚举类型
- enum Size{ SMALL , MEDIUM , LARGE , EXTRA_LARGE }; Size s = Size.MEDIUM;
- Size类型变量只可以存储,这个类型声明中给的某个枚举值
-
字符串
- 字串:String类的substring方法可以从一个比较大的字符串中提取一个子串。例如:String greeting = "Hello"; String s = greeting.substring(0, 3);则是创建了"Hel"字符串
- 拼接:Java允许使用+连接两个字符串,当一个字符与一个非字符拼接的时候非字符被转换成为字符串,如果把多个字符串放在一起可以使用String.join(a,b,c);
- 不可改变字符串:即无法直接修改greeting使之变成help!,只能使用greeting = greeting.substring(0,3)+"p!";
- 检查字符串是否相等,s.equals(t);s,t可以是字符串变量或者是字符串字面量,s.equalsIgnoreCase(t),比较字符串同时忽略大小写
- 空串与Null串
- 空串是长度为0的串
- Null串表示目前没有任何对象和这个变量关联
-