Java简单入门
一个简单的Java应用程序
-
实现的功能是向控制台发送一条消息:Hello World.
public class FirstSample { public static void main(String[] args) { System.out.println("Hello World"); } }
-
注意的细节
- Java区分大小写 如果把main写成Main,编译会报错
- public为访问修饰符(access modifier)
- class关键字,java程序的全部内容都必须放置在类中
- FirstSample:类名是以大写字母开头的名词,遵循CamelCase(驼峰命名)原则.
- main是程序的入口,编译完会生成FirstSample.class的字节码文件.
System.out.println
: System.out对象调用println方法,向控制台打印Hello World并换行..(点)
用于调用方法(向方法发送消息) : object.method(parameter).
注释
- 注释共分为三种
-
单行注释 :
// 注释的内容
-
多行注释 :
/* 注释的 内容 */
-
文档注释
/** @Version : 1.0.1 @author : UnKnown */
-
数据类型
-
Java是一种强类型语言,意味着必须为每一个变量声明一种类型,Java中一共有8种基本类型. 其中有4种整型,2种浮点类型,1种用于表示Unicode编码,还有一种便是表示真真假假的类型.
-
整型
-
整型表示没有小数部分的数值,它允许是负数
类型 存储需求(字节) 取值范围 byte 1 -128 ~ 127 short 2 -32768 ~ 32767 int 4 -2147483648 ~ 2147483647 long 8 -9223372036854775808 ~ 9223372036854775807
-
通常16进制以0x开头,例如 : 0x0A等于十进制的10
-
长整型(Long)的后缀有L或l
-
从java7开始,加上前缀0b或是0B就可以写二进制数,例如:0b1001就是9
-
-
浮点数
- 浮点数表示小数部分的数值
类型 存储需求(字节) 有效位数 float 4 6 ~ 7位 double 8 15位
- double又被称为双精度数值,使用较多
- 浮点数表示小数部分的数值
-
char类型
- 原本用于表示单个字符,如今有些Unicode字符可以用一个char值描述.
- 特殊字符的转义序列
转义序列 名称 Unicode值 \b 退格 \u0008 \t 制表 \u0009 \n 换行 \u000a \r 回车 \u000d \" 双引号 \u0022 \' 单引号 \u0027 \\ 反斜杠 \u005c
-
boolean类型
- 有两个值,false和true,用来判定逻辑条件
变量
-
变量的声明 : 每个变量都有一个类型,在声明变量时,变量的类型位于变量名之前.
double salary; int vacationDays; long earthPopulation boolean dong;
-
变量的初始化 :声明一个变量之后,必须用赋值语句对变量进行显式初始化
-
错误演示
int vacationDays; System.out.println(vacationDays);
-
正确的变量声明
int vacationDays=100;
-
常量
-
在java中用final指示常量.如:
public static final int PERSISTENCE_NUM=10;
-
final表示这个变量只能被赋值一次,一旦赋值就不能更改啦(引用类型一般指的是地址). 习惯上,常量名使用全大写.
运算符
-
常用的运算符
1. + : 加 2. - : 减 3. * : 乘 4. / : 除 5. % : 取余(又称模) 6. ? ...: ... : 三元运算符 例如 : 1>2 ? "1大" : "2大一点"
-
数值类型之间的转换
- 两个不同类型的数值进行二元操作时,首先会把两者类型自动转换为一致的,然后进行计算.
- 例如 : 1+1.2 : 自动转换成1.0+1.2 = 2.2
-
强制类型转换
- 不同类型的数值进行运算时可以使用(cast),进行强制类型转换,但是可能会损失一定的精度
- 例如 : 1+1.2 强制转换 : 1+(int)1.2 = 2 ;
-
结合赋值和运算符
- 可以在赋值中使用二元运算符,以简化书写.
- 如 : x+ = 4 等价于 x = x + 4;
- 一般的把运算符放在左边 : *= , -=
-
自增与自减运算符
- 加一和减一在程序开发中是很常见的的操作,java提供了自增和自减运算符
- 常见用法
- n++ : 首先使用n再进行+1;
- n-- : 首先使用n再进行-1;
- ++n : 首先把n+1再使用n;
- –n : 首先把n-1再使用n;
-
关系和布尔运算符
- 关系运算符 :
- == 检测是否相等,返回boolean类型值
- != 检测是否不相等,返回boolean类型值
- 关系运算符 :
-
枚举类型
- 变量的取值,只在一个有限的集合内.则可以使用枚举
- 如 : enum Size(SMALL,MEDIUM,LARGE)
-
字符串
-
每个用双引号括起来的字符串都是String类的一个实例
-
如 : String e = “”; Sring green = “绿色”;
-
子串
- String类的subString方法可以从一个较大的字符串中提取出一个子串
-
拼接
- 可以使用+号拼接两个字符串
- 可以使用String 的静态方法join方法
-
检测字符串是否相等
- (“a”).equal(“hello”) : 返回布尔值
-
空串和null值
-
有时需要检查一个字符串既不是null值也不是空串
if(str!=null&&str.lengh!=0)
-
-
码点与代码单元
-
Java字符串有char值序列组成,char类型是一个采用UTF-16编码表示Unicode码点的代码单元.
-
如 :
String hello = "Hello" int n = hello.length(); //is 5
-
调用s.charAt(n)将返回位置n的代码单元,n介于0~s.length()-1之间.
-
如 :
char first = hello.charAt(0); //first is "H"
-
-
String API
1. char charAt(int index) : 返回指定索引处的 char 值 2. int codePointAt(int index) : 返回指定索引处的字符(Unicode 代码点)。 3. boolean contains(CharSequence s) : 当且仅当此字符串包含指定的 char 值序列时,返回 true。 4. boolean equals(Object anObject) : 将此字符串与指定的对象比较。 5. boolean equalsIgnoreCase(String anotherString) : 将此 String 与另一个 String 比较,不考虑大小写。 6. byte[] getBytes() : 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 7. int hashCode() : 返回此字符串的哈希码。 8. int indexOf(String str) : 返回指定子字符串在此字符串中第一次出现处的索引。 9. int lastIndexOf(String str) : 返回指定子字符串在此字符串中最右边出现处的索引。 10. int length() : 返回此字符串的长度。 11. String replace(char oldChar, char newChar) : 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 12. String replace(CharSequence target, CharSequence replacement) : 使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。 13. String[] split(String regex, int limit) : 根据匹配给定的正则表达式来拆分此字符串。 14. String substring(int beginIndex) : 返回一个新的字符串,它是此字符串的一个子字符串。 15. String toLowerCase() : 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。 16. String trim() : 返回字符串的副本,忽略前导空白和尾部空白。 17. String join(CharSequence delimiter, CharSequence... elements) : 返回一个新字符串,用给定的定界符连接所有元素.
-
构建字符串
-
有些时候需要由较短的字符串构建字符串时,可以使用StringBuilder
-
如 :
StringBuilder sb = new StringBuilder(); sb.append("amer"); sb.append("ica"); sb.toString(); //sb : america
-
-
控制流程
-
块作用域 : 块是指由一对大括号括起来的若干条简单的Java语句. 块确定了变量的作用域,一个块可以嵌套在另一个块中.
-
条件语句
if(condition1) { statement1; }else if(condition2) { statement2; }
-
循环
-
while循环 : 首先简写循环条件,因此,循环体有可能不被执行
while(condition){ statement; }
-
do while循环 : 先执行语句(通常是一个语句块),再检测循环条件
do { statment; }while(condition)
-
for循环 : 也被称为确定循环. 通常循环的次数在开始循环前已经确定. 循环体内的变量值,不能在块外被引用.
for(int 1=0; i<10; i++) { System.out.println("结果输出10遍"); }
-
多重选择 : switch语句. 其中choice可以是byte,short,int,long,枚举常量以及字符串常量.
switch(choice) { case1: ... break; case2: ... break; case3: ... break; default: ... break }
-
-
-
中断控制流程语句
- break : 可以退出循环语句
- continue : 跳出当前循环,continue下边的语句不执行转而执行下一次循环.
-
大数值
-
如果基本的整数和浮点数精度不能满足需求,那么可以使用java.math包中的两个很有用的类,BigInteger和BigDecimal.
-
BigInteger的API
1. BigInteger add(BigInteger val) : 返回其值为 (this + val) 的 BigInteger。 2. BigInteger subtract(BigInteger val) : 返回其值为 (this - val) 的 BigInteger。 3. BigInteger multiply(BigInteger val) : 返回其值为 (this * val) 的 BigInteger。 4. BigInteger divide(BigInteger val) : 返回其值为 (this / val) 的 BigInteger。
-
BigDecimal的API类似BigInteger
-
-
数组
- 数组是一种数据结构,用来存储同一类型的集合,通过一个整型下标可以访问数组中的每一个值.
- 创建一个数字数组时,所有元素都初始化为0,boolean数组的元素会初始化为false.对象数组的元素则初始化为一个特殊值null.
- 数组一旦创建就不能改变其大小.如果经常需要在运行过程中扩展数组的大小,就应该使用另一种数据结构–数组列表(array list).
-
for each循环(增强for循环)
int[ ] arr = {1,2,4}; for(int in : arr) { System.out.print(in); //输出 1 2 4 }
-
数组拷贝
int[] luckyNumbers = {7,20,6,19}; int[] copyLuckNumbers = Arrays.copyOf(luckyNumbers,luckyNumbers.length());
-
命令行参数 :
- 编写java代码
public class FirstSample { public static void main(String[] args) { System.out.println(args[0]); } }
- javac FirstSample.java,然后java FirstSample -h world 控制台输出-h.
- 编写java代码
-
数组排序
-
要想对数值型数组排序,可以使用Arrays.sort()方法.
-
Math.random() : 会随机生成一个0-1(包含0但是不包含1)的随机数.
-
Arrays常用API
1. static <T> List<T> asList(T... a) : 返回一个受指定数组支持的固定大小的列表。 2. static void sort( byte[] a) : 对指定的 byte 型数组按数字升序进行排序。
-
-