参考书目: Java核心技术卷I 基础知识 Cay S.Horstmann Gray Cornell
示例代码与电子书下载
教程链接for mac
导航java目录目录 | 描述 |
---|---|
bin | 编译器与工具 |
demo | 演示 |
docs | HTML格式类库文档 |
include | 用于编译本地方法的文件 |
jre | Java运行环境文件 |
lib | 类库文件 |
src | 类库源文件 |
进入命令行并执行以下命令
javac Welcome.java
java Welcome
即可实现一个简单的Hello程序
Welcom.java内容如下:
public class Welcome
{
public static void main(String[] args)
{
String greeting = "Welcome to Core Java!";
System.out.println(greeting);
for (int i = 0; i < greeting.length(); i++)
System.out.print("=");
System.out.println();
}
}
利用applet执行java程序则键入以下两行命令
javac WelcomeApplet.java
appletviewer WelcomeApplet.html
接着加载html文件即可
Java程序结构Java Applet 可以大大提高Web页面的交互能力和动态执行能力。包含Applet的网页被称为Java-powered页,可以称其为Java支持的网页。
当用户访问这样的网页时,Applet被下载到用户的计算机上执行,但前提是用户使用的是支持Java的网络浏览器。由于Applet是在用户的计算机上执行的,所以它的执行速度不受网络带宽或者Modem存取速度的限制,用户可以更好地欣赏网页上Applet产生的多媒体效果。
每个java程序必须要有一个main方法,具体如下
public class ClassName
{
public static void main(String[] args)
{
program statements;
}
}
其输出语句如下:
System.out.println();
或者System.out.print();
前者是输出后换行,后者是输出后不换行
总共有八种数据类型,分别是
- int
- short
- long
- byte
- float
- double
- char
- boolean
具体与c类似,long
相当于c里的long long
,boolean
相当于c++里的bool
,byte
为1个字节的整型变量
长整形数值有后缀L,十六进制有前缀0x,八进制有前缀0,前缀0b可一表示二进制数,float
有后缀F,没有后缀的小数或者有后缀D代表double
,同时还可以为数字字面量加下划线,只是为了让人更容易读
部分常用浮点型常量如下
常量名称 | 含义 |
---|---|
Double.POSITIVE_INFINITY | 正无穷大 |
Double.NEGETIVE_INFINITY | 负无穷大 |
Double.NaN | NaN |
其含义请参照IEEE 754
boolean类型用于判定逻辑条件,整形值和布尔值之间不能进行相互转换!
常量利用final
表示常量,若希望再一个类中的多个方法中使用,则可以用static final
设置类常量,相当于c里的全局变量,需定义在main方法的外部
大体与c++类似
注意关系运算符返回的是boolean
型变量,不能作为整形变量参与运算
位运算符中含有>>>
运算符,将用0填充高位,没有<<<
运算符
Java不使用逗号运算符
数学函数Math中常用的方法
- sin cos tan atan atan2
- sqrt pow
- exp log log10
Math中常用的常量 - PI E
不必再数学方法或常量前加Math.
,只需在源文件顶部加入以下代码
import static java.lang.Math.*
类似c++,除boolean
不能与整形相互转化
直接看例子
enum Size {SMALL,MEDIUM,LARGE};
Size s=Size.MEDIUM;
Size类型变量只能储存给定枚举值或者null值
字符串应当将java中String类型看成c++的字符常量,而不是字符变量,因为其是不可改变的
运用String内的substring
方法乐意提取中一个子串,以及+
对字符串进行拼接,如此可以修改任意字符串,例子如下:
String greeting="Hello";
String s=greeting.substring(0,3);
greeting=greeting.substring(0,3)+"p!";
字符串s的值为"Hel";第二个greeting字符串的值为"Help!"
字符串常用方法集合
方法 | 返回值 | 例子 | 解释 |
---|---|---|---|
substring | String类型 | str.substring(0,3); | 提取出字符串[0,3)的子串 |
equals | boolean类型 | str.equals(str1) | 检测str是否与str1相等 |
equalsIgnoreCase | boolean类型 | str.equalsIgnoreCase(str1) | 类似equals但是忽略大小写 |
length | 整形 | str.length() | 返回str的代码点的长度 |
codePointCount | 整形 | str.codePointCount(0,str.length()); | 返回str代码点的数量 |
charAt | char型 | str.charAt(1); | 返回str中位置为1的代码单元 |
一定不能用==
检测两个字符串是否相等
关于代码点代码单元,参考此网址
想要得到第i个代码点,应该使用以下语句
int index=str.offsetByCodePoints(0,i);
int cp=str.codePointAt(index);
想要遍历一个字符串并依次查看
int cp=str.codePointAt(i);
if(Character.isSupplementaryCodePoint(cp))
i+=2;
else
i++;
执行以下语句进行回退
i--;
if(Character.isSurrogate(str.charAt(i)))
i--;
int cp=str.codePointAt(i);
对codePointAt更详细的了解以及对其 *** 作的范例请参考此网站
字符串的API可以利用javadoc生成自己API文档
命令如下
javadoc -encoding UTF-8 -charset UTF-8 文件名.java
如此查看生成文档的string类(如果有)即可,建议新建自定义文件夹docs下面,它不会自己生成文件夹
当然也可以在网上下载全部的文档,下载界面
构建字符串运用StringBuilder
类可以更高效的构建字符串
范例
StringBuilder builder=new StringBuilder();
builder.append(ch);//append a single character
builder.append(str);//append a string
String completedString=builder.toString
StringBuilder
类中的重要方法
名称 | 含义 |
---|---|
StringBuilder() | 构造一个空的字符串构建器 |
int length() | 返回构建器中代码单元数量 |
StringBuilder append(String str) | 追加字符串并返回this |
StringBuilder append(char s) | 追加代码单元并返回this |
StringBuilder appendCodePoint(int cp) | 追加代码点并返回this |
void setCharAt(int i,char c) | 将第i歌代码单元设置为c |
StringBuilder insert(int offset,String str); | 在offset位置插入新的字符串并返回this |
StringBuilder insert(int offset,char c); | 在offset位置插入新的代码单元并返回this |
StringBuilder delete(int startIndex,int endIndex); | 删除从[startIndex,endIndex)的代码单元并返回this |
String toString() | 生成字符串 |
通过利用Scanner类进行读取输入输出,Scanner类定义在java.util包中,所以在使用之前要加上import java.util.*;
程序范例如下:
import java.util.*;
public class InputTest
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("What is your name? ");
String name = in.nextLine();
System.out.print("How old are you? ");
int age = in.nextInt();
System.out.println("Hello, " + name + ". Next year, you'll be " + (age + 1));
}
}
相关的方法
方法 | 解释 |
---|---|
Scanner(InputStream in) | 构建一个Scanner对象 |
String nextLine() | 读取下一行内容 |
String next() | 读取下一行单词(空格作为分隔符) |
int nextInt() | 读取并转换下一个整数字符序列 |
double nextDouble() | 读取并转换下一个浮点数字符序列 |
boolean hasNext() | 检测是否还有其他单词 |
boolean hasNextInt() | 检测是否还有整数字符序列 |
boolean hasNextDouble() | 检测是否还有浮点数字符序列 |
运用Console类进行读取
范例:
Console cons=System.console();
String username=cons.readLine("User name");
char[] passwd=cons.readPassword("Password:");
创建console窗口进行 *** 作,右侧字符串为提示符兵读取输入直到结束,建议对于passwd字符数组在读取完之后进行抹除覆盖
格式化输出类似c可以利用格式化进行输出
范例:System.out.printf("%8.2f",x);
转化符和格式符与c有所差异,以下是转化符和格式符:
转换符 | 说明 |
---|---|
%s | 字符串类型 |
%c | 字符类型 |
%b | 布尔类型 |
%d | 整数类型(十进制) |
%x | 整数类型(十六进制) |
%o | 整数类型(八进制) |
%f | 浮点类型 |
%a | 十六进制浮点类型 |
%e | 指数类型 |
%g | 通用浮点类型(和e类型中较短的) |
%h | 散列码 |
%% | 百分比类型 |
%n | 换行符 |
%tx | 日期与时间类型(已过时) |
标志 | 说明 |
---|---|
+ | 为正数或者负数添加符号 |
- | 左对齐 |
0 | 数字前面补0 |
空格 | 在整数之前添加指定数量的空格 |
, | 以,对数字分组 |
( | 使用括号包含负数 |
# | 如果是浮点数则包含小数点,如果是16进制或8进制则添动加0x或0 |
< | 格式化前一个转换符所描述的参数 |
$ | 指定要格式化的参数索引 |
当然也可以用String.format方法创建格式化字符串
例子String message=String.format("Hello, %s. Next year, you'll be %d",name,age);
读取文件需要构造Scanner对象
Scanner in=new Scanner(Path.of("myfile.txt"),StandardCharsets.UTF_8);
写入文件需要构造PrintWrite对象
PrintWrite out=new PrintWrite(Path.of("myfile.txt"),StandardCharsets.UTF_8);
相对文件名例如myfile.txt
或../myfile.txt
,文件位于相对于java虚拟机启动目录的程序,在命令行执行则是当前命令行解释器所用目录
也可以用
String dir=System.getProperty("user.dir");
找到这个目录的位置
控制流程 块作用域大括号括起来为块作用域,类似于c,但不同于c的是不能在两个块中声明同名变量
条件语句与c类似(if else if else)
循环语句与c类似(while, do while, for)
多重语句与c类似(switch case)
中断控制语句与c类似(break,continue)
大数利用java.math包中的BigInteger和BigDecimal可以实现高精度运算
高精度基础用法
BigInteger方法合集
BigDecimal方法合集
补充几个常用的静态方法
返回值等于x的大整数
static BigInteger valueOf(long x);
返回值等于x或x/pow(10,scale)的一个大整数
static BigDecimal valueOf(long x);
static BigDecimal valueOf(long x,in scale);
数组
java数组中的方法类
声明数组与初始化数组声明数组的方式
int[] a;
int a[];
运用new *** 作进行初始化数组
int[] a=new int[100];
提供创建数组的简单的方式
int[] smallPrimes={2,3,5,7,11,13,};
最后一个值后面允许加逗号以方便为数组不断增加值
创建一个数组后所有的元素都会初始化为0
也可以声明匿名数组可以重新初始化一个数组而无需创建变量
smallPrimes=new int[]{17,19,23,29,31,37};
注:可以声明长度为0的数组,它与null的含义不一样
访问数组元素大体与c类似,可以用array.length来获得数组的元素的个数
for each增强的for each语句能够像python那样依次处理每个元素而不必考虑下标值
例子:
for(int element : a)
System.out.println(element);
当然也可以利用Arrays里的toString类进行快速打印
System.out.println(Arrays.toString(a));
数组拷贝
直接用的等号类似c一样将会两个数组共用一片地址
若要拷贝数值,则要用Arrays.copyOf方法,例子如下
int[] numA=Arrays.copyOf(numB,numB.length);
也可以用此方法增加数组的大小
int[] numA=Arrays.copyOf(numA,2*numA.length);
命令行参数
类似于c
数组排序调用Array.sort()方法即可进行排序
Java中实现降序排序的方法:网址
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)