Java基本程序设计结构(Java核心技术卷Ⅰ)

本文介绍了Java编程的基础知识,包括数据类型、变量、常量、运算符、字符串处理、输入输出、控制流程等内容,并详细讲解了数组的操作方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.Java程序基本程序设计结构

2.1. 数据类型

数据类型基本类型(8种)备注
整型int short long byte八进制前缀:0 十六进制:0x 二进制:0b
浮点float double有舍入误差
字符char‘A’ 字符 “A” 字符串
布尔boolean不能与整型值相互转换

2.2. 变量

变量名
以字母或数字开头
A-Z a-z _ $ 0-9

变量声明尽可能靠近变量第一次使用的地方


2.3. 常量

使用final指示 常量名使用全大写 类常量
可以在类中多个方法中使用
用static final指示
定义位于main方法外部

2.4. 运算符

逻辑与、逻辑或、与、或
&& || :短路运算
& | : 非短路
三元操作符: x > y ? x: y 异或:^ 非:~ 移位运算符
“>>” 右移 用符号位填充高位(正数补0 负数补1)
11>>2 即1011>>2 得到0010 ∴11>>2=2
“<<” 左移 低位补0(不溢出时,左移n位即乘以2的n次方)
3<<2 即0011<<2 得到1100 ∴3<<2=12
数值之间合法转换
数值类型转换
数值类型转换

强制类型转换

double x =3.45;
int nx = (int)x;

枚举

enum option{A,B,C,D};
option a = option.A;

2.5. 字符串

方法功能备注
substring(int a,int b)取子串提取(a,b]
equals(String s)检测是否相等可是字符串变量,也可是常量
equalsIgnoreCase(“Hello”)不区分大小写
length()求长度
trim()删除空格只删除头部和尾部的空格

每次连接字符串,重新构建String耗时又浪费时间,可以使用StringBuilder

StringBuilder builder = new StringBuilder();
builder.append("Hello");
String completedString = builder.toString();
StringBuilder&StringBuffer
StringBuilder:使用单线程编辑;效率高
StringBuffer:可以多线程,是线程安全的;效率低

2.6. 输入输出

/* 读取输入 */

import java.util.*;


//构造Scanner对象,与标准输入流System.in关联
Scanner in = new Scanner(System.in);
//读取输入的一行(可能包含空格)
String line = in.nextLine();
String word = in.next(); //读取一个单词
int n = in.nextInt(); //读取一个整数
double num = in.nextDouble(); //读取一个浮点数
boolean flag = in.hasNext(); //检测是否还有其他单词

因为输入是可见的,Scanner类不适用于从控制台读取密码。
要想读取一个密码,可以采用下列代码:

/* 读取密码 */

//必须在控制台中运行
Console console = System.console();
char[] password = console.readPassword("Password:");
/* 格式化输出 */

float num = (float) -1031.5;
//8个字符的宽度,小数点后2个字符的精度
System.out.printf("%8.2f",num);
//用逗号分组
System.out.printf("%,.2f",num);
//把负数括在括号里
System.out.printf("%(.2f",num);

//使用静态方法String.format创建格式化的字符串
String message=String.format("Hello,%s.Next year you'll be %d.",name,age);

//日期的格式化从t开始,以转换符结束
//打印当前日期时间。c:完整的日期时间
System.out.printf("%tc",new Date());
// <表示格式说明中的参数将被再次使用
System.out.printf("%s %tB %<te %<tY","today:",new Date());
/* 文件输入与输出 */

//使用File对象构造Scanner对象,路径包含反斜杠时应该多加个反斜杠
Scanner in = new Scanner(Paths.get("D:\\file.txt"));
//直接使用Scanner in = new Scanner("D:\\file.txt");会被当做数据而不是文件名
//构造PrintWriter对象写入文件。如果文件不存在,则创建文件
PrintWriter out = new PrintWriter("new.txt");

当用一个不存在的文件构造Scanner对象,以及PrintWriter不能创建文件时,发生异常。需要异常处理。


2.7. 控制流程

块作用域
块(复合语句)是指由一对花括号括起来的若干条简单Java语句。
可嵌套,但不能在嵌套的两个块中声明同名的变量。
条件语句
if(condition) statement1 else statement2
循环
while(condition) statement
do statement while(condition) 至少执行一次
确定循环
for(计数器初始化;循环条件;更新计数器)
应该对同一计数器变量初始化、检测、更新
/* switch语句 */

switch(today)
{
//case可以是char、byte、short、int、enum、string(since Java SE7)
    case weekday:
        System.out.println("Hello world!");
        break;
    case weekend:
        System.out.println("Goodbye world!");
        break;
    default:
        System.out.println("Error.");
        break;
}

中断控制流程
不带标签 break; //用于switch、循环
带标签 break 标签放在希望跳出的最外层循环之外并紧跟一个冒号

getOut:
for(condition)
{
    statement
    break getOut;
}

continue 越过循环体剩余部分,立即跳到循环首部


2.8. 大数值

java.math包中的BigInteger类提供任意精度的整数运算,BigDecimal类提供任意精度的浮点数运算。

BigInteger a = BigInteger.valueOf(100); //转为大数值
BigInteger b = a.add(a); //加法
BigInteger c= a.multiply(a); //乘法

2.9. 数组

一种数据结构,用来存储同一类型值的集合

//数字数组元素初始化为0,boolean初始化为false
int[] a = new int[100];

数组一旦创建,大小不可变。需要扩展数组时,使用数组列表(array list)。

/* for each循环 */

//遍历数组中所有值,不需要使用下标,不易出错
//collection这一集合表达式必须是一个数组或实现了Iterable接口的类
//也可以Arrays.toString(a);
for(variable: collection) statement
/* 数组初始化&匿名 */

//直接初始化,不需要调用new
int[] smallPrimes={2,3,5,7,11,13};
//初始化匿名数组,调用new
new int[]{1,2,3,4,5};
//重新初始化,不创建新变量
smallPrimes=new int[]{1,2,5,7}
/* 数组拷贝 */

//引用同一数组(指向同一存储位置)
int[] nums=smallPrimes;
//拷贝值。第二个参数是新数组长度,可以用来扩展数组
int[] copy=Arrays.copyOf(smallPrimes,smallPrimes.length);
/* 数组排序 */

//使用了优化后的快速排序
Arrays.sort(smallPrimes);
/* 多维数组 */

int[][] a=new int[10][10];
int[][] b=
{
    {1,1,2},
    {3,5,8}
}; //这里有分号

//使用for each遍历。但for each是按照一维数组处理的,所以要使用两个嵌套的循环
for(int[] row: b)
    for(int value:row)
        statement

//可以快速打印一个二维数组的数据元素列表
System.out.println(Arrays.deepToString(b));

不规则数组
Java实际上没有多维数组,只有一维数组。多维数组被解释为“数组的数组”。所以在Java中可以单独地存取数组的某一行,也可以构造一个不规则的数组。

/* 不规则数组 */

int[][] irregular = new int[5][];
for (int i = 0; i <5; i++) {
    irregular[i] =new int[i+1];
}

for (int i = 0; i < irregular.length; i++) {
    for (int j = 0; j < irregular[i].length; j++) {
        irregular[i][j]=1;
        }
    }

System.out.println(Arrays.deepToString(irregular));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值