Java简介3.0
Posted 364.99°
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java简介3.0相关的知识,希望对你有一定的参考价值。
目录
1.控制流程
1.1块(block)作用域
块(复合语句):由若干条Java语句组成的语句,并用一堆大括号括起来
其确定了变量的作用域,且一个块能嵌套进另一个块
不能在嵌套的两个块中声明同名变量
1.2.条件语句
1.if
单个语句:
if (condition) statement
块语句(block statement):
if(condition){
statement1;
statement2;
...
}
2.if else
单个语句:
if (condition) statement1 else statement2
块语句(block statement):
if(condition){
statement1;
statement2;
...
}
else{
statement3;
statement4;
}
else与最近的if构成一组
3.if elseif
if(condition){
statement1;
statement2;
...
}
elseif(condition2){
statement3;
statement4;
}
elseif(condition3){
statement5;
statement6;
}
else{
statement7;
statement8;
}
1.3.循环
注意设置循环截止条件,防止死循环
1.while
当条件为true时,while就执行一条语句(块语句)
单句循环
while (condition) statement;
块(多句)循环
while (statement){
statement1;
statemenr2;
...
}
2.do while
不管条件是否为true,都要先执行一次循环语句
单句循环
do statement while (condition) ;
块(多句)循环
do (statement){
statement1;
statemenr2;
...
}
while (condition);
3.for
for循环是支持迭代的一种通用结构,由一个计数器或类似的变量控制迭代计数,每次迭代后这个变量将会更新。
格式:
for(计数器初始化;循环条件;更新计数器){
循环语句
}
for语句的3个部分应该对同一个计数器变量进行初始化、检测和更新
注意
在循环中,检测两个浮点数是否相等时,由于舍入的误差,可能永远达不到精确地最终值
for语句中的变量不能在循环体之外使用
4.switch
switch多重选择,switch语句将从与选项值相匹配的
case
标签开始执行,遇到break或执行到switch语句的结束处停止,如果没有匹配的case,就会执行default
语句
switch (date){
case date1:
...
break;
case date2:
...
break;
case date3:
...
break;
default:
...
break;
}
注意:
在case语句末尾没有break语句,将会接着执行下一个case分支语句,从而触达多个case分支
case标签范围:
char、byte、short、int的常量表达式
枚举常量
字符串字面量(Java7)
1.4.中断控制流程的语句
1.continue
结束此次循环,进入下一次循环
2.break
跳出所在循环语句
3.带标签的break
标签需要放在希望跳出的最外层循环之前
public class BreakLoop {
public static void main(String[] args) {
loop://声明一个标签
for (int i = 1;i < Integer.MAX_VALUE;i++){
for (int j = 1;j < Byte.MAX_VALUE;i++){
while (j < 10){
System.out.println("循环中:"+j);
if (j%3 == 0)
break loop;//当j为3的整数倍时,跳出到标签所在块
j++;
}
}
}
}
}
2.大数
2.1.BigInteger和BigDecimal
import java.math.*;
当基本的整数和浮点数精度不能满足需求时,可以使用
java.math
包中的BigInteger
和BigDecimal
.
BigInteger
:可实现任意精度的整数运算
BigDecimal
:可实现任意精度的浮点数运算
valueOf
:将普通的书转换为大数(如:BigInteger b = BigInteger.valueOf(100);
)
对于更大的数,可以使用一个带字符串参数的构造器:BigInteger b = new BigInteger("23131456435135154186486486415131321313...");
一些大数常量:BigInteger.ZERO、BigInteger.ONE、BigInteger.TEN、BigInteger.TWO(Java9)
不能使用算术运算符(+ - 等)处理大数
2.2.API
import java.math.BigInteger;
关键字 | 简介 |
---|---|
BigInteger add(BigInteger other) BigInteger substract(BigInteger other) BigInteger multiply(BigInteger other) BigInteger divide(BigInteger other) BigInteger mod(BigInteger other) | 返回两个大数的 和 差 积 商 余数 |
BigInteger sqrt() | 大数的平方根 |
BigInteger comparaTo(BigInteger other) | 两个大数相等,返回0 此大数更大,返回整数 此大数更小,返回负数 |
static BigInteger valueOf(long x) | 返回值等于x的大整数 |
import java.math.BigDecimal;
关键字 | 简介 |
---|---|
BigDecimal add(BigDecimal other) BigDecimal substract(BigDecimal other) BigDecimal multiply(BigDecimal other) BigDecimal divide(BigDecimal other) BigDecimal divide(BigDecimal other,RoundingMode mode) | 返回此大实数与other的 和 差 积 商 如果商是无线循环小数,第一个divide会抛出异常,此时可用第二个方法RoundingMode.HALF_UP得到一个四舍五入结果 |
int compareTo(BigDecimal other) | 相等返回0 此小于other,返回负数 此大于other,返回正数 |
static BigDecimal valueOf(long x) static BigDecimal valueOf(long x,int scale) | 返回值等于x 或x/(10^scale)的一个大实数 |
3.数组
数组是一种数据结构,用来存储相同类型值的序列,通过一个整型下标/索引(index)可以访问数组中的每一个值
Java应用程序的main方法中,程序名并没有存储在args数组中
3.1.声明数组
public class Array {
public static void main(String[] args) {
int a[];//声明一个数组变量,并没有将a初始化为一个真正的数组
int[] b = new int[13];//声明并初始化了一个可以存储13个整数的数组
int [] c = {1,2,3,4,5};//创建数组对象的同时,为其赋值(简写形式)
int[] d = new int[]{1,2,3,4,5};//创建数组对象的同时,为其赋值
}
}
3.2.访问数组元素
数组下标是从0开始的
创建一个数字数组是,所有元素初始值为0
Boolean数组,初始值为false
对象数组(如String),初始值为null
public class Array {
public static void main(String[] args) {
int[] a = new int[10];
//使用for循环给数组赋值
for (int i=0;i < a.length;i++){
a[i] = i;
}
}
}
3.3.for each循环
增强型for循环语句:
for (variable : collection) statement
其定义了一个变量用于暂存集合中的每一个元素,并执行相应的语句(语句块)。collection这一集合表达式必须是一个数组或者是一个实现了Iterable接口的类对象(如ArrayList、LinkList)
public class Array {
public static void main(String[] args) {
int[] a= new int[13];
//赋值
for (int i=0;i < a.length;i++){
a[i] = (int)(3+Math.random()*10);//给数组a赋值3到13的随机整数
}
//遍历
for (int each:a){
System.out.print(each + " ");
}
System.out.println();
}
}
3.4.Arrays
import java.util.Arrays
xxx代表数据类型
关键字 | 简介 |
---|---|
static String toString(xxx[ ] a) | 返回数组a中包含的元素的一个字符串 |
static xxx[ ] copyOf(xxx[ ] a,int end) static xxx[ ]copyOfRange(xxx[ ] a,int start,int length) | 复制数组a中的元素,当end>a.length时,会自动填充0 |
static void sort(xxx[ ] a) | 对数组a进行排序 |
static int binarySearch(xxx[ ] a,xxx v) static int binarySearch(xxx[ ] a,int start,int end,xxx v) | 使用二分法在数组a中查找值v,查找到了返回下标,否则,返回一个负数值r,-r-1是v应该插入的位置上 |
static void fill(xxx[ ] a,xxx v) | 将数组的所有元素都设为v |
static boolean equals(xxx[ ] a,xxx[ ] b) | 两个数组大小相同,且下表相同的元素对应相同,返回true |
import java.util.Arrays;
public class Array {
public static void main(String[] args) {
int[] a= new int[13];
//赋值
for (int i=0;i < a.length;i++){
a[i] = (int)(3+Math.random()*10);//给数组a赋值3到13的随机整数
}
//遍历
System.out.println("输出原数组:");
for (int each:a){
System.out.print(each + " ");
}
System.out.println();
//复制、排序、查找、填充
int []b = Arrays.copyOfRange(a,0,a.length);//将a的元素,复制到b中
Arrays.sort(b);//对数组b进行排序
System.out.println("输出排序后的数组:");
for (int each : b){
System.out.print(each + " ");
}
System.out.println();
System.out.println("11在数组b中的位置:" + Arrays.binarySearch(b,11));//查找
Arrays.fill(b,7);//填充7
System.out.println("输出填充后的数组b:");
for (int each : b){
System.out.print(each + " ");
}
System.out.println();
}
}
3.5.二维数组
Java中并没有多维数组,只有一位数组,多维数组被解释为“数组的数组”
import java.util.Arrays;
public class Array {
public static void main(String[] args) {
int [][] a = new int[3][4];//声明二维数组的时候,必须声明其行数
int [][] b = {//会自动补0
{1,2},
{3,4,5},
{6,7,8,9}
};
//给数组a赋值
for (int i=0;i < a.length;i++){
for (int j=0;j < a[i].length;j++){
a[i][j] = (int)(Math.random()*100);
}
}
//遍历数组b(增强for循环)
for (int[] row : a){
for (int value : row){
System.out.print("\\t" + value );
}
System.out.println();
}
//遍历数组a(快速打印)
System.out.println(Arrays.deepToString(a));
}
}
3.6.不规则数组
创建一个三角数组
public class Array {
public static void main(String[] args) {
//声明常量
final int len = 10;
//分配三角数组
int [][] odds = new int[len + 1][];
for (int n=0;n <=len;n++)
odds[n] = new int[n + 1];//每行列数递增
//赋值
for (int n = 0;n < odds.length;n++){
for (int m = 0;m < odds[n].length;m++){
odds[n][m] = (int)(Math.random()*100);
}
}
//遍历打印
for (int []row : odds){
for (int odd : row){
System.out.print("\\t" + odd);
}
System.out.println();
}
}
}
以上是关于Java简介3.0的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段