以下内容是学习《java核心技术卷1》的学习笔记

一、一个简单的java应用程序

public class App {

public static void main(String[] args) {

System.out.println("yuanyexiaolu");

}

}

代码解释:

关键字public称为访问修饰符,这些修饰符用于控制程序的其他部分对这段代码的访问级别。class表明java程序中的全部内容都包含在类中。目前只需要将类理解为程序逻辑的一个容器,程序逻辑定义了应用程序的行为。类是构建所有java应用程序和applet的构建块。java应用程序中的全部内容都必须放置在类中。

关键字clas后面紧跟类名。java中定义类名的规则比较宽松,不要使用java保留字即可。类名是以大写字母开头的名词。如果名字由多个单词组成,每个单词的第一个字母都应该大写。

源代码的文件名必须与公共类的名字相同,并使用.java作为扩展名。所以以上演示代码的文件名为:App.java,在类的源文件中必须包含一个main方法。java中使用“{}”划分程序的各个部分。每个句子必须使用分号结束。

二、注释

单行注释://

多行注释:/**/

文档注释:/**开始 */结束

三、数据类型

java中一共有8中基本类型,其中有4中整型、2种浮点类型、1中字符类型char,1中布尔类型;

1、整型

int 4字节

short 2字节

long 8字节

byte 1字节

注意:长整型数值有一个后缀L或l(400000l)。十六进制数值有一个前缀0x。

2、浮点类型

float 4字节

double 8字节

注意事项:

float类型的数值有一个后缀F或f。如果没有后缀F的浮点数值总是默认为double类型。当然也可以在浮点数后面加D或d。

3、char类型

char类型原本用于表示单个字符。char类型的字面量值用单引号括起来。

4、布尔类型

布尔类型有两个值:false 和true,用来判断逻辑条件。整型值和布尔值之间不能进行互相转换。

三、变量与常量

java中变量用来存储值,常量就是值不变的变量。

1、声明变量

在java中,每个变量都有一个类型(type)。在声明变量时,先指定变量的类型,然后是变量名。

如:

double number;

boolean flage;

int student;

可以发现,每个声明都以分号结束。由于声明是一条完整的java语句,而所有java语句都以分号结束,所以这里的分号是必须的。

变量名必须是一个以字母开头并由字母或数字构成的序列,且大小写敏感。

2、变量初始化

声明一个变量之后,必须用赋值语句对变量进行显式初始化,千万不要使用未初始化的变量。要想对一个已经声明过的变量进行赋值,就需要将变量名放在等号左侧,在把一个适当取值的java表达式放在等号的右侧。

如:

int number=90;

3、常量

在java中,利用关键字final指示常量。

如:

final double number=89.5;

注意:

关键字final表示这个变量只能被赋值一次,一旦被赋值之后,就不能够再更改了。习惯上,常量名使用全大写。

在java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量(class constant)。可以使用关键字static final设置一个类常量。

如:

public static final doucle NUMBER=20.2;

注意事项:

需要注意,类常量的定义位于main方法的外部。因此,在同一个类的其他方法中也可以使用这个常量。而且,如果一个常量被声明为public,那么其他类的方法也可以使用这个常量。

四、运算符

1、算术运算符

在java中,使用算术运算符+,-,*,/表示加,减,乘,除运算。整数的求余操作用%表示。

2、数学函数与常量

在Math类中,包含了各种各样的数学函数。在编写不同类别的程序时,可能需要的函数也不同。

要想计算一个数值的平方根,可使用Math.sqrt方法;

要想实现幂运算,可使用Math.pow方法,pow接收两个参数,第一个参数为底数,第二个参数为指数;

其他一些数学相关计算,在需要的时候可以自行查资料。

3、数值类型之间的转换

byte--short--int--long--doublue

char--int--float--double

long--float

int--double

在java中进行运算的时候,先要将两个操作数转换为同一种类型,在进行计算。

4、结合赋值和运算符

可以在赋值中使用二元运算符。一般来说,要把运算符放在=好左边。

如:+=

5、自增与自减运算符

前自增:++i,先对i值加1,然后进行相关运算;

后自增:i++,相关运算结束后,对i值加1;

6、关系和boolean运算符

java包含丰富的关系运算符,要检测相等性,可以使用两个等号==,另外使用!=检测不相等。

最后,还有经常使用的<(小于),>(大于),<=(小于等于),>=(大于等于)运算符。

逻辑运算相关:&&符号表示“与”运算,||表示逻辑“或”运算。

7、括号与运算符级别

如果不使用圆括号,就按照给出的运算符优先级次序进行计算。同一个级别的运算符按照从左到右的次序进行计算。

五、字符串

从概念上讲,java字符串就是Unicode字符序列。java没有内置的字符串类型,而是在标准java类库中提供了一个预定义类,很自然地叫做string。每个用双引号括起来的字符串都是string类。

举例如下:

String example=""; //空字符串

String name ="yuanyexincun";

1、子串

String类的substring方法可以从一个较大的字符串提取出一个子串。

如:

String greeting="yuanyexincun";

String s=greeting.substring(0,3) //yua

解释:substring的两个参数,分别表示起始位置和结束位置。

2、拼接

和绝大多数程序设计语言一样,java语言允许使用+号连接两个字符串。

public class App {

public static void main(String[] args) {

String name1="yuanye";

String name2="xincun";

System.err.println(name1+name2); //yuanyexincun

}

}

3、不可变字符串

String类没有提供修改字符串中某个字符的方法。在java中实现修改字符串内容的方法,可以提取想要保留的子串,再与希望替换的字符拼接。

如:我想讲字符串内容“yuanyexicun” 改为“yuanyexiaohu”

String name="yuanyexincun";

String name=name.substring(0,6)+"xiaohu";

4、检测字符串是否相等

我们可以使用equals方法检测两个字符串是否相等。

语法如下:

str1.equals(str2)

解释:

如果字符串str1与字符串str2相等,则返回true,否则,返回false。str1和str2可以是字符串变量,也可以是字符串字面量。

要想检测两个字符串是否相等,而不区分大小写,可以使用equalsIgnoreCase方法。

语法如下:

“Xiaohu".equalsIgnoreCase("xiaohu")

解释:

最后该语句运行的结果为true,表示这两个字符串的内容是相等的。

注意事项:

一定不要使用==运算符检测两个字符串是否相等。这个运算符只能够确定两个字符串时会否存放在同一个位置上。如果字符串在同一个位置上,它们必然相等,但是完全有可能将内容相同的多个字符串副本放置在不同的位置上。

5、空串与Null串

空串“”是长度为0的字符串。可以调用以下代码检测一个字符串是否为空:

if (str.length()==0) 或者 if(str.equals(""))

空串是一个java对象,有自己的串长度(0)和内容(空)。 不过,string变量还可以存在一个特殊的值,名为null。表示目前没有任何对象与该变量关联。

6、码点与代码单元

java字符串由char值序列组成。最常用的Unicode字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元表示。

length方法将返回采用utf-16编码表示给定字符串所需要的代码单元数量。

如:

String name="xiaohu";

int n=name.length(); //6

String类还有许多方法,这里不依次举例,需要的时候查找即可。

7、构建字符串

有时候,需要由较短的字符串构建字符串。使用字符串拼接的方式来达到这个目的,效率比较低,每次拼接字符串时,都会构建一个新的String对象。使用StringBuilder类就可以避免这个问题的发生。

语法如下:

首先构建一个空的字符串构建器:

StringBuilder builder = new StringBuilder();

当每次需要添加一部分内容时,就调用append方法。

builder.append(ch); //添加了一个单个字符

字符串构建完成时就调用toString方法,将可以得到一个String对象,其中包含了构建器中的字符序列。

String conpleteString=builder.toString();

六、输入与输出

为了增加后面示例程序的趣味性,需要程序能够接收输入,并适当地格式化程序输出。接下来,我们将学习使用基本的控制台来实现输入输出。

1、读取输入

前面已经看到,将输出打印到“标准输出流”(即控制台窗口)是一件非常容易得事情,只需要调用System.out.println即可。然而,读取“标准输入流”System.in就没有那么简单了。要想通过控制台进行输入,首先需要构造一个与“标准输入流” System.in关联的Scanner对象。

语法如下:

Scanner in= new Scanner(System.in)

实例如下:

import java.util.Scanner;

public class test {

public static void main(String[] args) {

try (Scanner in = new Scanner(System.in)) { // 使用 try-with-resources 提供自动关闭

System.out.print("请输入您的姓名:");

String name = in.nextLine();

System.out.println("您输入的姓名是:" + name);

}

}

}

解释:

nextLine方法将读取一行输入。 要想读取一个单词(以空白符作为分隔符),可以调用next()方法。

读取一个整数,就使用nextIntf()方法。

读取一个浮点数,就使用nextDouble()方法。

注意事项:

Scanner类定义在java.util包中,当使用的类不是定义在基本java.lang包中时,一定要使用import指令导入相应的包。

2、格式化输出

可以使用语句System.out.print(x)将数值x输出到控制台。这条命令将以x的类型所允许的最大非0数位个数打印输出x。

java5沿用了C语言函数库中的printf方法。格式化输出基本一致

如:

public class test {

public static void main(String[] args) {

float number=10.232f;

System.out.printf("%5.1f",number);

}

}

可是使用静态的String.format方法创建一个格式化的字符串,而不打印输出.

实例如下:

String message =String.format("Hello",%s. Next yeat, you'll be "%d",name,age)

七、控制流程

1、块作用域

块(即复合语句)是指若干条java语句组成的语句,并用一对大括号括起来。块确定了变量的作用域。一个块可以嵌套在另一个快中。但是不能在嵌套的两个块中声明同名的变量。

2、条件语句

和绝大多数程序设计语言一样,java常常希望在某个条件为真时执行多条语句。

条件语句的语法如下:、

if (条件) 执行语句

if(条件) 执行语句1 else 执行语句2

if(条件1) 执行语句1 else if(条件2) 执行语句2 else 执行语句3

注意:

else子句与最邻近的if构成一组。

3、循环

当条件为true时,while循环执行一条语句(也可以是一个块语句)。

一般语法如下:

while (条件) 执行语句;

还有一种while循环语法——先执行语句,再判断条件:

do 执行语句

while (条件)

4、确定循环

for循环语句是支持迭代的一种通用结构,由一个计数器或类似的变量控制迭代次数,每次迭代后这个变量将会更新。

具体实例如下:

for (int i=0;i<=10;i++)

System.out.println(i);

5、多重选择:switch语句

在处理多个选项时,使用if/else结构显得有些笨拙。java有一个与c/c++完全一样的seitch语句。

具体语法如下:

Switch( 变量)

{

case 1:

.....

break;

case 2:

.....

break;

default:

break;

}

解释:

Switch语句将从与选项值相匹配的case标签开始执行,直到遇到break语句,或者执行到switch语句的结束为止。如果没有相匹配的case标签,而有default子句,就执行这个子句。

6、中断控制流程的语句

break和continue,前者直接结束当前循环;后者结束本次循环,直接进入到下一次循环。

八、大数

如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中两个很有用的类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现任意精度的整数运算,BigDecimal实现任意精度的浮点数运算。

注意:

大数不能使用人们熟悉的算符运算符(如:+和*)处理,而需要使用大数类中的add和mutiply方法。

具体实例:

import java.math.BigInteger;

public class Main {

public static void main(String[] args) {

BigInteger a=BigInteger.valueOf(100);

BigInteger b=BigInteger.valueOf(10);

BigInteger c=a.add(b);

System.out.println(c);

}

}

九、数组

数组存储相同类型值的序列。

1、声明数组

数组是一种数据结构,用来存储同一类型的集合。通过一个整型下标可以访问数组中的每一个值。

在声明数组变量时,需要指出数组类型(数据元素类型紧跟[])和数组变量的名字。

实例:

int [] a; //声明了一个整型数组a

不过,这条语句只声明了变量a,并没有将a初始化为一个真正的数组。应该使用new操作符创建数组。

实例如下:

int [] a= new int[100]; //这条语句声明并初始化了一个可以存储100个整数的数组

注意:

一旦创建了数组,就不能再改变它的长度(但是可以改变单个的数组元素)。

在java中,提供了一种创建数组对象并同时提供初始值的简写形式,

实例如下:

int[] number={1,2,3,5,6};

注意:

这个语法中不需要使用new,甚至不同指定长度。

2、访问数组元素

一旦创建了数组,就可以在数组中填入元素。

实例如下:

import java.math.BigInteger;

public class Main {

public static void main(String[] args) {

int[] number =new int[10];

for(int i=0;i<10;i++){

number[i]=i;

System.out.println(number[i]);

}

}

}

3、for each循环

java有一种功能很强的循环结构,可以用来依次处理数组(或其他元素集合)中的每个元素,而不必考虑指定下标值。

这种增强的for循环的语句格式为:

for (变量:集合表达式) 执行语句;

解释:

需要定义一个变量用于暂存集合中的每一个元素,并执行相应的语句(也可以是语句块)。collection这一集合表达式必须是一个数组或者是一个实现了Iterable接口的类对象(如ArrayList)。

具体事例如下:

import java.math.BigInteger;

public class Main {

public static void main(String[] args) {

int[] number =new int[10];

for(int i=0;i<10;i++){

number[i]=i;

}

for(int temp: number){

System.out.println(temp);

}

}

}

使用场景:不用遍历数组元素索引,直接打印数组元素。

4、数组拷贝

在java中,允许将一个数组变量拷贝到另一个数组变量。这时,两个变量将引用同一个数组。

如果希望将一个数组的所有值拷贝拷贝到一个新的数组中去,就要使用Arrays类的copyof方法。

语法如下:

int[] copiedLuckyNumbers= Arrays.copyOf(array1,array1.length);

解释:

第2个参数是新数组的长度,这个方法通常用来增加数组的大小。如果数组元素是数值型,那么额外的元素将被赋值为0;如果数组元素是布尔型,则将赋值为false。相反,如果长度小于原始数组的长度,则只拷贝前面的值。

具体实例:

import java.lang.reflect.Array;

import java.math.BigInteger;

import java.util.Arrays;

public class Main {

public static void main(String[] args) {

int[] number =new int[10];

for(int i=0;i<10;i++){

number[i]=i;

}

int[] new_array=Arrays.copyOf(number, 5);

for (int i:new_array)

System.out.println(i);

}

}

5、命令行参数

前面已经看到一个java数组重复出现过很多次,每一个java应用程序都有一个带String arg[]参数的main方法。这个参数表明main方法将接收一个字符串数组,也就是命令行上指定的参数。

6、数组排序

要想对数值型数组进行排序,可以使用Arrays类中的sort方法。

具体实例:

import java.lang.reflect.Array;

import java.math.BigInteger;

import java.util.Arrays;

public class Main {

public static void main(String[] args) {

int[] number=new int[10];

for (int i=0;i<10;i++)

number[i]=(int)(Math.random()*10); //random随机返回0~1之间的数,乘10将数字扩大十倍。

Arrays.sort(number);

for (int i:number)

System.out.println(i);

System.out.printf("当前数组的长度为:%d",number.length);

}

}

7、多维数组

多维数组将使用多个下标访问数组元素,它使用与表示表格或者更加复杂的排列形式。

java中二维数组的声明为:

double[][] example;

初始化语法为:

example=new double[row][col]

另外如果知道数组元素,就可以不调用new,而直接使用简写形式对多维数组进行初始化。

具体实例如下:

int[][] example=

{

{1,2,3,},

{4,5,6},

}

一旦数组初始化,就可以利用两个中括号访问各个元素。如:example[i][j]

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部