以下内容是学习《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]
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » java基础知识汇总
发表评论 取消回复