java核心技术 第3章 java基本程序设计结构
类名规范:以大写字母开头的名词 若由多个单词组成 每个单词的第一个字母应大写(驼峰命名法) 与.java文件名相同
运行程序:java ClassName(dos命令)
打印语句:System.out,println() 打印完语句换行 System.out,print() 打印完不换行
注释:1. // 2. /* */ 3. 以/**开始 以*/结束 可用来自动生成文档
数据类型:1. 整形: int 4字节 short 2字节 long 8字节 byte 1字节
长整型数值后面有一个后缀L或l 如4000000000L
十六进制数值有一个前缀0x或0X 如0XCAFE
八进制有一个前缀0 如010 (八进制前缀易与十进制混淆 所以一般避免使用八进制)
从java7开始 加上前缀0b或0B就可以写二进制数 如0b1001就是9 也可以在数字间加下划线 如1_000_000
2. 浮点类型:float 4字节 double 8字节
float类型有一个后缀F或f 没有后缀的浮点数默认为double型
可以使用16进制表示浮点数值 如0.125=2e-3可表示为0x1.0p-3 在16进制中 使用p表示指数
正无穷大:Double.POSITIVE_INFINITY
负无穷大:Double.NEGATIVE_INFINITY
NaN(不是一个数字):Double.NaN 注意:不能if(x==Double.NaN) 但可以if(Double.isNaN(x))
3.char类型:原本用于表示单个字符 现在有些unicode字符可以用一个char值描述 另外一些需要两个char值
要用' '括起来 如'A'是编码值为65的字符常量 与"A"不同 "A"是一个包含字符A的字符串
特殊字符的转义序列
\b 退格 \u0008 \t 制表 \u0009 \n 换行 \u000a \r 回车 \u000d
\" 双引号 \u0022 \' 单引号 \u0027 \\ 反斜杠 \u005c
4.boolean型:即布尔类型 包括 false 和 true
在java中 boolean值只能是true和false 而不能用0和1代替 并且一定要小写
变量与常量:1.变量:变量名中不能包含空格 不提倡int i,j这种声明风格 最好声明完后直接初始化
从java10开始 对于局部变量 如果可以从变量初始值推断出类型 可使用var关键字而无需指定类型
如var greeting = "Hello" var i = 2
2.常量:用final关键字指示常量 如 final double PI = 3.14
final表示该变量只能被赋值一次 赋值后不可修改 习惯上 常量名使用全大写
类常量:若希望某个常量可以在一个类的多个方法中使用 可使用类常量
如public static final double PI = 3.14 在类的开头定义
3.枚举类型:可自定义枚举类型 如 enum Size{SMALL, MEDIUM, LARGE}; 然后可声明这种类型的变量
如 Size s = Size.MEDIUM
运算符:1.算数运算符:+ - * / % 注意 当参与/的两个数都是整数时 则为整数除法 否则为浮点除法 如15.0 / 2 = 7.5
注意 整数被0除会产生一个异常 浮点数被0除将会得到无穷大或NaN结果
2.数学函数与常量:在Math类中 包含了许多数学函数 如pow() sqrt() floorMod() 三角函数 指数函数及反函数 以及PI E 等等
导入Math库 import static java.lang.Math.* 不过java已经自动导入lang包 所以不用在去特殊导入Math
Math库中提供了一些方法提醒计算溢出等问题 可调用Math.multiplyExact() 若溢出则会生成一个异常
你可以选择捕获或者让程序终止 而不是允许它给出一个错误结果而继续运行
另外还有addExact() subtractExact() incrementExact() decrementExact() negateExact()等
3.强制类型转换:可能丢失信息的转换需要通过强转来完成 格式如下
double x = 9.997; int nx = (int)x;
若想进行舍入运算 可使用Math.round()方法 用法为round(x, n) x为数值 n为精度
4.自增与自减:在表达式中 前缀形式会先完成加一 后缀形式会使用变量原来的值 建议不要在表达式中使用 会使我感到困惑
5.关系与boolean运算符:== && || < > <= >=
java支持三元操作符?: 用法为x < y ? x : y 会返回x y中较小的一个
6.位运算符:处理整数类型时 可以直接对组成整数的各个位完成操作 这意味着可以使用掩码技术得到整数中的各个位
位运算符包括:& :and | :or ^ :xor ~ :not 具体咋用自己查 我也不会
<< 与 >> 运算符可将位模式左移或右移 >>>运算符会用0填充高位
7.运算符级别:a += b += c 等价于 a += (b += c) 因为+=是右结合运算符
字符串:java没有内置的字符串类型 而是提供了一个预定义类String 每个用双引号括起来的字符串都是String的一个实例
1.子串:String中的substring方法而可以从一个较大的字符串中提取出一个子串 如String s = greeting.substring(0, 3) 即提取前3个字符
2.拼接:java允许使用+号来连接两个字符串 当一个字符串或" "与一个非字符串的值连接时 后者会转换为字符串
这种特性通常出现在输出语句中 如 System.out.println(" " + age) 或 System.out.println("The age is " + age)
如果需要把多个字符串放在一起 用一个界定符分隔 可使用静态join方法 如
String all = String.join(" / ", "S", "M", "L", "XL"); // all is the string "S / M / L / XL"
在java11中还提供了一个repeat方法:String i = "Java".repeat(3); // i is "JavaJavaJava"
3.不可变字符串:String类没有提供修改字符串中某个字符的方法 即String类对象是不可变的
若想修改字符串 可提取想要保留的子串(substring) 再与希望替换的字符拼接(+)
4.检测字符串是否相等:可以使用equals方法检测 如s.equals(t) 若字符串s与t相等 则返回true 否则返回false
s与t可为字符串变量 也可以是字面量 如 "Hello".equals(greeting)
若要检测两个字符串是否相等而不区分大小写 可使用equalsIgnoreCase 如"Hello".equalsIgnoreCase("hello")
注意:一定不要使用==检测两个字符串是否相等 这个运算符只能确定两个字符串是否存放在同一个位置上
什么叫是否存放在同一个位置上呢?
String类型有基本的两种构造 一种是String a = "hello" 另一种是String a = new String()
第一种构造的字符串存储于公共池中,对于同一个字符串,String a 与 b指向的是同一个字符串,所以a == b为true
第二种构造的是String类的一个对象,相当于对字符串的一个引用,a与b是两个不同的实例引用 所以a == b为false
这里一定要注意 + 和 substring等String库中的函数创造的字符串均为String的一个实例 为第二种情况
所以,在检测两个字符串内容是否相等的时候 一定要用equals,千万不能用==!
5.码点与代码单元:具体见p48页 我也看不懂
6.String.API:具体见书P49页 介绍了许多String类的常用方法
7.构建字符串:有些时候需要由较短的字符串构建字符串 若用+效率会很低 既浪费时间又浪费空间 可使用StringBuilder类来构建
StringBuilder builder = new StringBuilder();
每次若添加一部分内容时 就调用append()方法
builder.append(str);
字符串构建完成后就调用toString()方法 就可以得到一个String对象
String a = builder.toString();
具体常用API见书P54页
输入与输出:import java.util.*
1.读取输入:若想通过控制台进行输入 需要构造一个与标注输入流System.in关联的Scanner对象 如
Scanner input = new Scanner(System.in);
然后就可以使用Scanner类的方法来读取输入了
input.nextline() 读取一行 .next() 读取一个单词 .nextInt() 读取一个整数 .nextDouble() 读取一个浮点数
注意:因为输入是可见的 所以Scanner类不适合读取密码 java6引入了Console类来实现这个目的 可使用如下代码
Console cons = System.console();
String username = cons.readLIne("User name: ");
char[] passwd = cons.readPassword("Password: ");
为安全起见 返回的密码应该放在一个字符数组中 在对密码处理完成之后 应该马上用一个填充值覆盖数组元素
采用Console对象处理输入不如Scanner方便 必须每次读取一行输入 而没有读取单个单词或数值的方法
Scanner类的其他方法见书P56页
2.格式化输出: System.out.printf(format , item1 , item2 , ... , itemk)
e.g. System.out.printf("Count is %4.2f" , count); 输出台显示为 Count is 16.40
4代表宽度 .后的2代表小数点后精度 %f为格式符
常用的格式限定符:%b 布尔值 %f 浮点数 %c 字符 %e 科学计数法 %d 十进制整数 %s 字符串
注意 长度小于宽度时,会在前面加空格 大于宽度时,会自动增加宽度
若要输出数字为12,345,678形式的 可在%后加一个, 如%,8d
若要在数字前面加0来补足位数 可在%后加一个0 如%08d
默认输出为右对齐 若要输出左对齐的格式 可在%后加一个- 如%-8d
3.文件输入与输出
java核心技术 第3章 java基本程序设计结构的更多相关文章
- Java核心技术第五章——1.类、超类、子类(2)
继上一篇Java核心技术第五章——1.类.超类.子类(1) 6.重载解析 假如调用ClassName.Method(args) 1.编译器列出类ClassName所有名为Method的方法. 2.编译 ...
- Java多线程编程核心技术-第1章-Java多线程技能-读书笔记
第 1 章 Java 多线程技能 本章主要内容 线程的启动 如何使线程暂停 如何使线程停止 线程的优先级 线程安全相关的问题 1.1 进程和多线程的概念及线程的优点 进程是操作系统结构的基础:是一次程 ...
- java面向对象编程——第二章 java基础语法
第二章 java基础语法 1. java关键字 abstract boolean break byte case catch char class const continue default do ...
- 《深入理解java虚拟机》第二章 Java内存区域与内存溢出异常
第二章 Java内存区域与内存溢出异常 2.2 运行时数据区域
- Java 学习笔记 ------第一章 Java平台概论
本章学习目标: Java版本迁移简介 认识Java SE.Java EE.Java ME 认识JDK规范与操作 了解JVM.JRE与JDK 下载与安装JDK 一.Java版本迁移简介 书上已经表达得非 ...
- 深入理解java虚拟机-第12章Java内存模型与线程
第12章 Java内存模型与线程 Java内存模型 主内存与工作内存: java内存模型规定了所有的变量都在主内存中,每条线程还有自己的工作内存. 工作内存中保存了该线程使用的主内存副本拷贝,线程对 ...
- Java核心技术第五章——1.类、超类、子类(1)
1.定义子类: 关键字extends表明正在构造的新类派生与一个已存在的类.已存在的类称为超类.基类或父类:新类称为子类.派生类或孩子类.超类和子类是Java程序员最常用的两个术语(emmm~~我觉得 ...
- [Java核心技术]第四章-对象与类(4.1-4.6总结)
4.1面向对象程序设计概述 OOP(面向对象编程Object Oriented Programming) OOP中数据第一位,算法第二位. 类 封装:关键在于不能让其他方法直接访问类的实例域,程序仅通 ...
- Java核心技术第五章——2.Object类
Object类:所有类的超类 Object类是Java中所有类的始祖,在Java中每个类都是由它扩展而来的.但是并不需要这样写: public class Emloyee extends Object ...
随机推荐
- DEDECMS首页循环调用一级栏目和二级栏目的实现方法
调用方法: {dede:channelartlist typeid='2'} <li class="First"><a href="{dede:fiel ...
- Python测试框架对比----unittest, pytest, nose, robot framework对比
什么是框架? 框架(Framework)是整个或部分系统的可重用设计, 框架是用来解决代码的组织及运行控制问题的. 在我们编写自动化脚本的时候,经常需要读取配置文件,读取数据文件,发送请求,记录日志, ...
- P3273-[SCOI2011]棘手的操作【线段树,并查集】
正题 题目链接:https://www.luogu.com.cn/problem/P3273 题目大意 \(n\)个点有权值,要求支持操作 连接两个点 单点加权 联通块加权 全图加权 单点询问 联通块 ...
- 如何使用云效Flow做质量检测,保障高质量的交付速度
使用云效Flow做质量检测,保障高质量的交付速度,云效「Flow」 提供代码扫描. 安全扫描和各种自动化测试能力,支持人工测试卡点.自动化验证卡点等多种质量红线,确保业务质量.云效流水线 Flow 流 ...
- 【.NET 与树莓派】气压传感器——BMP180
BMP180 是一款数字气压计传感器,实际可读出温度和气压值.此模块使用 IIC(i2c)协议.模块体积很小,比老周的大拇指指甲还小:也很便宜,一般是长这样的.螺丝孔只开一个,也有开两个孔的. 这货基 ...
- 计算机网络-4-1-2-分类的IP地址
有关IP最重要的文档就是互联网的正式标准RFC 791 IP地址及其表示方法 整个互联网就是一个单一,抽象的网络,IP地址就是给互联网上的每一台主机(或者路由器)的每一个接口分配一个在全世界范围内都是 ...
- 从0到1使用Kubernetes系列——Kubernetes入门
基本概念 Docker 是什么 Docker 起初是 dotCloud 公司创始人 Solomon Hykes 在法国的时候发起的一项公司内部项目,Docker 是基于 dotCloud 公司多年云服 ...
- 利用PATH环境变量 - 提升linux权限~👻
利用PATH提升linux权限 参考地址:https://www.hackingarticles.in/linux-privilege-escalation-using-path-variable/ ...
- FastAPI 学习之路(四)
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) 之前的文章分享了如何去在请求中增加参数,本文我们将分享 ...
- 2020.12.20-Codeforces Round #105补题
B - Escape The princess is going to escape the dragon's cave, and she needs to plan it carefully. Th ...