Java核心技术-Java的基本程序设计结构
1.一个简单的Java应用程序
public class FirstSample
{
public static void main(String[] args)
{
System.out.pringln("We will not use 'Hello,World!'");
}
}
这个程序虽然简单,但所有的Java应用程序都具有这种结构:
首先,Java区分大小写(如将main写成Main程序将无法运行)
下面逐行分析这段代码:
public关键字称为访问修饰符,用于控制程序的其它部分对这段代码的访问级别。
class关键字表明Java程序中的全部内容都包含在类中。
类名紧跟在class关键字后面,名字必须以字母开头,后面可以跟字母和数字的任意组合,不能使用Java关键字
static关键字修饰的方法称为类方法
void关键字表示无返回类型
标准的命名规范——骆驼命名法
源代码的文件名必须与类名相同
2.注释
1.// 最常用的注释方式,其注释内容从//开始到本行结尾
2./*和*/ 用于长篇注释,将注释内容放在/*和*/中间
3./**和*/用来生成自动文档,将注释内容放在/**和*/中间
3.数据类型
Java是一种强类型语言,必须为每一个变量声明一种类型。
基本数据类型:4种整型、2种浮点型、1种字符型、一种布尔型
3.1 整型
从Java7开始,加上前缀0b或0B就可以写二进制数。(0b1001表示9)
从Java7开始,还可以为数字字面量加下划线(1_000_000表示100万)
3.2 浮点类型
三种特殊的浮点数值:正无穷大(一个正整数除以0)、负无穷大、NaN(不是一个数字,如0/0或者负数的平方根)
不能用x==Double.NaN检测x是否等于Double.NaN,可以使用Double.isNaN(x)检测
2.0-1.1将打印出0.899999999999,如果数值在计算中不允许有任何误差,就应该用BigDecimal类
3.3 char类型
char类型的字面量要用单引号括起来
有些Unicode字符可以用一个char值描述,另外一些Unicode字符则需要两个char值
3.4 boolean类型
用来判定逻辑条件:true/false
4.变量
4.1 变量
变量名必须是一个以字母开头并由字母(包括”_“、"$")或数字构成的序列.
声明一个变量后,必须用赋值语句对变量进行显式的初始化。
变量的声明尽可能地靠近变量第一次使用的地方是一种良好的编程风格
4.2 常量
final关键字用于指示常量(习惯上常量名使用全大写)
static final设置一个类常量
5.运算符
strictfp关键字标记的方法必须使用严格的浮点计算来生成可再生的结果(有可能产生溢出)
5.1数学函数
floorMod方法是解决整数求余的问题
在Math类中,为了达到最快的性能,所有方法都使用计算机浮点单元中的例程,如果得到一个完全可预测的结果比运算速度更重要的话,应该使用StrictMath类。
5.2 数值类型之间的转换
转换顺序:double->float->long->int
int转float失效原因(https://blog.csdn.net/m1n_love/article/details/55224990)
5.3 强制类型转换
对浮点数进行舍入运算:Math.round
5.4 结合赋值和运算符
x+=4;
5.5 自增与自减运算符
5.6 关系和boolean运算符
==、!=、&&、||(短路)、x<y?x:y;
5.7 位运算符
&、|(不短路)、^、~、>>、<<(移位操作要进行模32操作或64)
5.8 括号与运算符级别
5.9 枚举类型
enum Size{ SMALL,MEDIUM,LARGE,EXTRA_LARGE}
Size s=Size.MEDIUM
6 字符串
Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,叫做String
6.1 子串
String类的substring方法
6.2 拼接
1.使用+号连接:当一个字符串与一个非字符串拼接时,后者会被转换成字符串(任何一个Java对象都能被转换成字符串)
2.如果需要把多个字符串放在一起,用一个定界符分隔,可以使用静态join方法:String.join("/","S","M","L","XL");
6.3 不可变字符串
String类没有提供修改字符串的方法,因此Java文档中将String类对象称为不可变字符串。
不可变字符串有一个优点:编译器可以让字符串共享
Java设计者认为共享带来的高效率远远胜过于提取、拼接字符串所带来的低效率
6.4 检测字符串是否相等
使用equals而不要使用==
如果虚拟机始终将相同的字符串共享,就可以使用==运算符检测是否相等。但实际上只有字符串常量是共享的,而+或substring等操作产生的结果并不是共享的,当使用==运算符测试字符串相等时,从表面上看,这种bug很像随机产生的间歇性错误。
6.5 空串与null串
if(str != null && str.length != 0) 首先检查str不为null
6.6 码点与代码单元
不要使用char数据类型(代码单元)来保存从字符串中取出的码点
6.7 构建字符串
构建字符串时如果采用字符串连接的方式,每次连接字符串都会构建一个新的String对象,既耗时,又浪费空间。使用StringBuilder类可以避免这个问题发生(单线程)。
StringBuffer类较StringBuilder类效率稍低,但允许在多线程中使用。
7 输入输出
7.1 读取输入
输入可见:Scanner in=new Scanner(System.in);
输入不可见:Console cons=System.console();
String username=cons.readLine("User name:");
char[] passwd=cons.readPassword("Password:");——每次只能读取一行输入,而没有能读取一个单词或一个数值的方法
7.2 格式化输出
System.printf("Hello,%s. Next year,you'll be %d",name,age);
每一个以%开始的格式说明符都用相应的参数替换
String date=String.format("%1$s %2$tB %2$te,%2$tY","Due date:",new Date());
格式说明符的语法图:
7.3 文件输入与输出
如果文件名中包含反斜杠符号,就要记住在每个反斜杠前加一个额外的反斜杠:"c:\\mydirectory\\myfile.txt"
查找文件路径:String dir=System.getProperty("user.dir");
8 控制流程
Java使用条件语句和循环结构确定控制流程
8.1 块作用域
块是指由一对大括号括起来的若干条简单的Java语句,块确定了变量的作用域。
8.2 条件语句
if/else
8.3 循环语句
while/do-while
8.4 确定循环
在循环中,检测两个浮点数是否相等需要格外小心:
for(double x=0;x!=10;x+=0.1) 因为0.1无法精确的使用二进制表示,所以循环可能永远无法结束
8.5 多重选择
switch
8.6 中断控制流程语句
Java中增加了一条带标签的break,用于跳出多重循环。
对于任何使用break语句的代码都需要检测循环是正常结束还是由break跳出。
9 大数值
大数值可以处理包含任意长度数字序列的数值
BigInteger(任意精度整数)和BigDecimal(任意精度浮点数)
lotterOdds=lotterOdds.multiply(BigInteger.valueOf(n-i+1).divide(BigInteger.valueOf(i));
10 数组
数组是一种数据结构,用来存储同一类型值得集合。
数字数组所有元素初始化为0;Boolean数组元素会初始化为false;对象数组得元素会初始化为null。
获得数组中的元素个数:array.length
一旦创建了数组,就不能改变它的大小。如果经常需要在运行中扩展数组的大小,就应该使用数组列表(ArrayList)。
要打印数组可以使用Arrays.toString(a);
10.1 增强for循环
for each循环可以用来依次处理数组中的每个元素(无需使用下标)
10.2 数组初始化以及匿名数组
数组的初始化:
int[] smallPrimes={2,3,5,6,11};
使用匿名数组可以在不创建新变量的情况下重新初始化一个数组。
smallPrimes=new int[]{17,18,23,29,31};
10.3 数组拷贝
一个数组变量拷贝给另一个数组变量:这时两个变量将引用同一个数组。
int[] luckyNumbers=smallPrimes;
一个数组的值拷贝给另一个数组:使用Arrays.copyOf方法:
int[] copiedLuckyNumbers=Arrays.copyOf(luckyNumbers,2*luckyNumbers.length);
10.4 命令行参数
10.5 数组排序
对数值型数组进行排序可以使用Arrays类中的sort方法,这个方法使用了优化的快速排序算法。
10.6 二维数组
多维数组将使用多个下标访问数组元素,它适用于表示表格或更加复杂的排列形式。
遍历二维数组:
for(int i=0;i<balances.length;i++)
{
for(int j=0;j<balances[i].length;j++)
{ ... }
}
for each循环语句不能自动处理二维数组的每一个元素,需要使用两个嵌套循环
要想快速打印一个二维数组的数据元素列表,可以调用:Arrays.deepToString(a));
10.6 不规则数组
Java实际上没有多维数组,只有一维数组,多维数组被解释为“数组的数组”
Java核心技术-Java的基本程序设计结构的更多相关文章
- java核心技术学习笔记之三程序设计结构
一 基本数据结构 必须包括在类中 必须具备 public static main方法 大小写敏感 二.数据类型 四种整数类型: Int 4字节 short 2字节 long8字节 byte1字节 二种 ...
- java核心技术学习笔记之一程序设计概述
Java 核心技术之一程序设计概述 一. Java语言的特点 简单行 :取经于C++,排除了C++不常用的指针.结构等,增加垃圾回收. 面向对象:与C++不同是单继承,但是可以继承多接口.完全面向 ...
- java核心技术学习笔记之一程序设计环境
一术语 JDK:Java Delelpment Jit JRE:Java Runtime Environment 二.安装jdk1.8.0_25 设置环境变量(建议直接安装在C盘下),使用:隔开 C: ...
- Java核心技术--Java程序设计
Java术语 术语名 缩写 解释 Java Development Kit(Java开发工具包) JDK 编写Java程序的程序员使用的软件 Java Runtime Environment(Java ...
- Java核心技术第八章——泛型程序设计(1)
1.泛型程序设计 泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用.例如:不希望为了聚集String和Integer对象分别设计不同的类.(个人觉得此处说的聚集译为:创建一个对象,属性可以为 ...
- Java核心技术卷一基础知识-第3章-Java的基本程序设计结构-读书笔记
第3章 Java的基本程序设计结构 本章内容: 一个简单的Java应用程序 字符串 注释 输入输出 数据类型 控制流 变量 大数值 运算符 数组 本章主要讲述程序设计相关的基本概念(如数据类型.分支以 ...
- Java核心技术卷阅读随笔--第3章【Java 的基本程序设计结构】
Java 的基本程序设计结构 现在, 假定已经成功地安装了 JDK,并且能够运行第 2 章中给出的示例程序.我们从现在开始将介绍 Java 应用程序设计.本章主要介绍程序设计的基本概念(如数据类型.分 ...
- 重新学习Java——Java基本的程序设计结构(二)
上一节简单回顾了Java基本的一些程序设计的知识,这一节将继续根据<Java核心技术>这本书,进行这方面知识的复习与探索. 1. 字符串 Java字符串实际上就是Unicode字符序列.例 ...
- Java核心技术(Java白皮书)卷Ⅰ 第一章 Java程序设计概述
第1章 Java程序设计概述1.1 Java程序设计平台 具有令人赏心悦目的语法和易于理解的语言,与其他许多优秀语言一样,Java满足这些要求. 可移植性 垃圾收集 提供大型的库 如果想要有奇特的绘 ...
随机推荐
- C#.NET抽象类和接口的区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况.不能创建abstract 类的实例.然 ...
- 【转】linux内核态和用户态的区别
原文网址:http://www.mike.org.cn/articles/linux-kernel-mode-and-user-mode-distinction/ 内核态与用户态是操作系统的两种运行级 ...
- 树的遍历——pat1043
http://pat.zju.edu.cn/contests/pat-a-practise/1043 给予N个数字组成二叉搜索树,判断这个数列是否由先序遍历得出或是镜像先序遍历得出,若是则输出相应的后 ...
- linux(centos)下安装ffmpeg
[备忘]windows环境下20行php代码搞定音频裁剪 上次我的这篇文章将了windows下web中如何操作ffmpeg的文章,这里则记录下linux(centos)下的安装 首先:我花了中午大概1 ...
- cocos2d js 利用texture packer生成sprite
cc.spriteFrameCache.addSpriteFrames(res.winLose_plist,res.winLose_png); var frame = cc.spriteFrameCa ...
- 字符串的问题(substr,find用法)
链接:https://www.nowcoder.com/acm/contest/77/C来源:牛客网 字符串的问题 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他 ...
- 列表的使用2,深COPY和浅COPY,循环列表,步长切片
name2=names.copy() 下面我看几种奇怪的现象: 首先把源列表copy以后,把源列表第2个数值修改.那么没毛病. 如果源列表里,还包含了一个子列表:这也没毛病 如果我们这个时候修改子列表 ...
- zookeeper的四种类型的节点
znode创建类型(CreateMode),有以下四种: PERSISTENT 持久化节点 PERSISTENT_SEQUENTIAL 顺序自动编号持久化节点,这种节点会根据当前已存在的节点数自动加 ...
- ThinkPHP 配置详解
3.0 ThinkPHP配置详解 3.1 入口文件的配置 一般不建议在入口文件做过多的配置,但可以重新定义一些系统常量,以下简单介绍几个常用的系统常量. 1.APP_PATH 默认情况下,框架的项 ...
- linux查看进程是否存在,不存在则重启
ps -ef | grep 程序名| grep -v grep | wc -l cd $(dirname $) source ~/.bash_profile count=`ps -ef | grep ...