JAVA基础知识学习01

JAVA基础知识学习01

1.一个简单的Java应用程序

public class FirstSample{
	public static void main(String[] args){
		System.out.println("we will not use 'Hello world!'");
	}
}

从这段最基本的程序中,可以知道一些Java最基本的规则:

1.Java区分大小写;
2. 关键字public是访问修饰符,在后面章节会具体介绍;
3. 关键字class表明Java程序中的全部内容都包含在类中,类是构建所有Java应用程序和applet的构建块,Java应用程序中的全部内容都必须放置在类中,而且关键字class后面紧跟类名
4. Java中所有函数都是某个类的方法(或者说成员函数,也就是不存在类外的函数这种东西);
5. Java虚拟机(JVM)总是从指定类中的main方法的代码块开始执行,因此类的源文件中必须包含一个main方法,main方法必须声明为public
6. Java标准的命名规范为:类名是以大写字母开头的名词,多个单词组成,则每个单词第一个字母大写;
7. 源代码的文件名必须与public类(每个源文件只能有一个类声明为public)的名字相同,并用.java作为扩展名;
8. Java中与C++一样,采用大括号来划分程序的各个块,Java中每条代码都以分号结束,回车不是语句结束标志,因此可以一行写多个语句;
9. void表示这个方法没有返回值。

2.注释

Java中一共有三种注释方式:
1.单行注释:在每行的注释前标记 //
2. 多行注释:在注释段以“/* ”开头,以“ */”结尾
3. 文档注释:在注释段以“/**”开头,以“ */”结尾

3.数据类型

Java必须为每个变量都声明一种数据类型。

3.1整型

整型共有四种:int(4字节)、long(8字节)、short(2字节)、byte(1字节)。后两者用于特殊场合,比如底层文件处理或内存有限但要处理大数组时。
长整型数值有个后缀l或者L,十六进制数值有个前缀0x或0X,八进制有个前缀0,加上前缀0b或0B可以写二进制数,还可以给大数字加下划线方便阅读。

3.2浮点类型

浮点型数值有float和double,后者表示该类数值的精度是前者的两倍,float型数值有个后缀f或F,无后缀默认为double型

3.3 char类型

3.4 Unicode和char类型

3.5 Boolean类型

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

4.变量与常量

4.1 变量

在申明变量时,要先指定一个变量的类型,然后是变量名,声明的变量后接分号,可以在一行中声明多个变量。

int i , j;//i和j都是整型变量

变量初始化,可以直接在变量名后面用等号赋值。变量的声明尽量靠近第一次使用该变量的地方。从Java 10开始,对于局部变量,如果可以从初始值推断出它的类型,那就不需要声明类型,只需要使用关键字var即可。

var vacationDays = 12
var greeting = "Hello"

4.2 常量(final)

Java中一般用final来指示常量。一共会有三种情况:

final 类型 变量名 = data;//表示该变量只能被赋值一次
static final 类型 变量名 = data;//这是一个类常量,可以在一个类的多个方法中使用
public static final 类型 变量名=data;//其他类的方法也可以使用该常量

4.3 枚举类型(enum)

自定义枚举类型,枚举类型包括有限个命名的值。如

enum Size = {SMALL,MEDIUM,LARGE,EXTRA_LARGE};

现在Size可以作为一个数据类型,声明该数据类型的变量,其值只能是枚举类型中的某个枚举值或者是特殊值null。如

Size s = Size.MEDIUM;// 变量s是Size类型的

5 运算符

5.1 算数运算符

Java中算术运算符包括+、-、*、/,即加减乘除。其中当参与/运算的两个数都是整数时,表示整数除法,否则为浮点数除法。整数的求余用%表示。

5.2 数学函数与常量

Math类中包含了各种各样的数学函数,例如

Math.sqrt(x);//表示求x的平方根
Math.pow(x,a);//表示求x的a次幂
Math.PI;Math.E;//表示pai值和最然对数的底数

引入Math包,就可以不用添加前缀“Math”,即

import static java.lang.Math.*;

5.3 数值类型间的转换

两个不同类型的操作数做运算时,数据类型优先级如下:有double则全为double,否则有float则全为float,否则有long则全为long,否则为int。

5.4 强制类型转换

强制转换方式如下

double x = 9.997;
int nx = (int) x; //此时nx的值为9

如果想进行舍入,就要用到Math.round方法

double x = 9.997;
int nx = (int) Math.round(x); //此时nx的值为10。任然需要强制转换,因为round返回的结果为long型

5.5 结合赋值运算符与自加自减

x+=4;//相当于x= x+4

自加自减:x++是先使用原来的值,使用完之后再加1;而++x是先对x加1,再用在表达式中。

5.6 关系和Boolean运算符

Java中检测相等用==,检测不等用!=,其返回的值为true或者false。此外还有>,<,<=,>=运算符。
逻辑运算符有:&&表示逻辑与,||表示逻辑或,!表示逻辑非。对于逻辑与运算,第一个表达式为false则直接返回结果,不运算第二个表达式。对于逻辑或,第一个表达式为true则直接返回结果。
三元操作符?:其表达式为 condition?expression 1:expression 2 意思是条件为true则返回第一个表达式的值,否则返回第二个的。

5.7 位运算符

&("and")     |("or")   ^("xor")    ~("not")

>>和<<运算符可以将位模式左移或右移
>>>运算符会用0填充高位,而>>是用符号位填充高位,不存在<<<运算符。

5.8 括号与运算符级别

6 字符串

6.1

7 输入与输出

7.1读取输入

要想通过控制台进行输入,首先需要构造一个与“标准输入流”System.in关联的Scanner对象。即

import java.util.*      //Scanner类定义在java.util包中
//使用的类不是定义在基本的java.lang包中时,要使用import导入包
...
Scanner in = new Scanner(System.in);
System.out.print("what is your name?");
String name = in.nextLine();//nextLine方法将读取一行输入

使用nextLine方法是因为输入行中可能包含空格,读取一个单词可以用next方法,读取一个整数,可以调用nextInt方法。
因为输入是可见的,所以Scanner类不适用于从控制台读取密码,java 6 中引入了Console类来实现这个目标,要读取一个密码,可以使用下列代码:

Consloe cons = System.console();//具体如何实现待后续
String username = cons.readLine("user name:");
char[] passwd = cons.readPassword("password:");

7.2 格式化输出

格式化数值输出用printf方法,例如,调用

System.out.printf("%8.2f",x);

会按照一个字段宽度输出x:包括8个字符,精度为小数点后两个字符。如果除去小数部分,整数部分字符是不足5(8-3),就会打印一个前导空格。
还可以为printf提供多个参数,例如

System.out.printf(“Hello, %s. Next year, you will be %d", name, age);

每个以%开头的格式说明符都用相应的参数替换。格式说明符尾部的转换符指示要格式化的数值的类型:f表示浮点数,s表示字符串,d表示10进制整数,c表示字符,b表示布尔,%表示%(即要表示百分号是,得用%%)
另外还可以指定控制格式化输出外观的各种标志。其中+表示打印正数和负数的符号 0表示数字前补0 (表示将负数扩在括号内 ,表示添加分组分隔符(如3,333.33)

7.3 文件输入与输出

要想读取一个文件,需要构造一个Scanner对象,如下所示

Scanner in = new Scanner(Path.of("myfile.txt"),StandardCharset.UTF_8);

文件名中如果有反斜杠,则需要加一个额外的反斜杠进行转义。上述代码中指定了UTF-8字符编码,如果省略了就会使用默认编码,这一般不建议。
要想写入文件,就需要构造一个PrintWriter对象。在构造器中,需要提供文件名和字符编码:

PrintWriter out = new PrintWriter(("myfile.txt"),StandardCharset.UTF_8);

如果文件不存在,就会创建该文件,再写入。
如果用一个不存在的文件构造Scanner,或用一个无法创建的文件名构造PrintWriter,就会出现严重错误,这里可以用throws子句在main方法中做标记。

8 控制流程

8.1 条件语句

if  (condition)  statement
if  (condition)  statement1 else  statement1 

条件用小括号括起来,statement是多个语句就用大括号括起来

8.2 循环

while循环:

while (condition) statement //先做判断在执行程序,可能出现一次循环都没做的情况
do statement while (condition); //先执行一次程序再做判断

for循环:

for (int i = 1;i<=10;i++)  //for语句至少包含初始化、检测和更新三部分
	System.out.println(i);  //循环部分

8.3 多重选择:switch语句

switch语句将从与选项值相匹配的case标签开始执行,直到遇到break语句。
case 的标签可以是:
1、类型为char、byte、short或int的常量表达式
2、枚举常量
3、从Java 7开始,case还可以是字符串字面量

8.4 中断控制流程的语句

除了上述的break外,Java还有一种带标签的break语句。标签放在希望跳出的最外层循环之前,并带冒号。break后面跟着标签名。例如

这种带标签的break语句不但可以用在循环中,还可以用在if语句中。
与break向对应的就是continue,若执行到该语句,则会马上跳到while循环的首部,if循环的更新部分。还有一种就是带标签的continue语句,该语句将跳到与标签匹配的循环的首部。例如

for(count = 1; count <=100; count++){
	System.out.print("enter a number,-1 to quit:");
	n = in.nextInt();
	if (n<0) continue;
	sum += n;
}

9 数组

9.1 声明数组

1)在声明数组变量时,需要指出数组类型和数组变量的名字。如

int[] a; //只声明额变量a,并没有将a初始化为一个真正的数组
int[] a = new int[100];  //or var a = new int[100]; 
//声明并初始化一个存储100个整数的数组

new int[n]会创建一个长度为n的数组。一旦创建了数组,就不能改变其长度。如果在程序运行中需要经常扩展数组大小,就需要使用另一种数据结构,即数组列表(array list),数组列表后续介绍。
2)另外有一种创建数组并提供初始值的方法,例如

int[] smallPrimes = {2,3,5,7,11,13};
String[] authors = {"james","tom",""bill,};//这种方法不需要new

new int[] {17,19,23,29,31};//该方法声明了一个匿名数组
smallPrimes = new int[] {17,19,23,29,31}; //重新初始化了smallPrimes

创建一个数字数组时,所有元素都初始化为0;Boolean数组的元素初始化为false;对象数组的元素则初始化为一个特殊值null,如创建字符串数组时,未赋值时都为null。
3)访问数组元素:如果a是一个整型数组,a[i]就是数组中下标为i的整数。a[n]的下标为0~n-1.
4)要获得数组中元素的个数,可以使用array.length
5)给数组中元素赋值,可以使用如下方法:

int[] numbers = new int[n];
for (int i=0; i<numbers.length;i++)
	numbers[i] = i+1;

9.2 for each循环

for each循环是用来处理数组(或其他元素集合)中每个元素的一种方法。语句格式为

for (variable : collection) statement

collection这一集合表达式必须是一个数组或者是一个实现了Iterable接口的类对象(如ArrayList)。variable是一个与数组元素同类型的变量,用来存储每个数组元素。例如

for (int element : a) 
	System.out.println(element);

如果要打印数组中的所有值,可以用Array类中的toSting方法。调用Array.toSting(a),返回一个包含数组元素的字符串,这些元素包围在中括号内,并用逗号分隔,例如

System.out.println(Array.toSting(a));//输出为“[2,3,5,7,11,13]”

9.3 数组拷贝(拷贝变量和拷贝元素)

1)Java中允许将一个数组变量拷贝到另一个数组变量,此时两个变量将引用同一个数组,修改一个变量的元素,另一个也会改变。如:

int[] luckyNumbers = smallPrimes;
luckyNumbers[5] = 12; //now smallPrimes[5] is also 12

2)如果要将一个数组的所有值拷贝到另一个新的数组中,就要使用Array类的copyOf方法,例如

int[] copiesluckyNumbers = Array.copyOf(luckyNumbers,luckyNumbers.length);

上式中的第二个参数是新数组的长度,这个方法可以用来增加数组的大小,超过原数组部分的元素被赋值为0。相反,如果小于原始数组长度,则只拷贝前面的值。

9.4 命令行参数

Java中都会有个带String arg[]参数的main方法。该参数表面main方法接收一个字符串数组,也就是命令行上指定的参数。而程序名不会存储在args 数组中,例如命令行上输入java Message -h world 时,args[0]时“-h”,而不是java或者Message。

9.5 数组排序

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

int[] a = new int[10000];
...
Array.sort(a)

这里有一个例子里面有很多要点,好好看看:

import java.util.*;
public class LotteryDrawing{
	public static void main(String[] args){
		Scanner in = new Scanner(System.in);
		System.out.println("How many number do you need to draw?");
		int k = in.nextInt();
		System.out.print("What is the highest number you can draw?");
		int n = in.nextInt();
		int[] numbers = new int[n];
		for(int i=0;i<numbers.length;i++)
			numbers[i] = i+1;
		int result = new int[k];
		for(int i=0;i<result.length;i++){
			int r = (int) (Math.random()*n);
			result[i] = numbers[r];
			numbers[r] = numbers[n-1];
			n--;
		}
		Arrays.sort(result);
		System.out.println("Bet the following combination. It will make you rich");
		for(int r : result)
			System.out.println(r);
	}
}

9.6 多维数组与不规则数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值