Java基础语法

Java基础语法

注释

  • 单句注释 //
  • 段落注释 /* */
  • 文档注释

img

有趣的代码注释


标识符

标识符注意点

  • 所有的标识符都应该以字母(A-Z或a-z)、美元符($)或者下划线(_)开始

  • 首字母之后可以是字母(A-Z或a-z)、美元符($)、下划线(_)或者数字的任意字符组合

  • 不能使用关键字作为变量名或方法名

  • 标识符是大小写敏感的

  • 合法标识符举例:age、$salsry、_value、__1_value

  • 非法标识符举例:123abc、-salary、#abc

  • 可以使用中文命名,但是一般不建议这样去做


数据类型

强类型语言要求变量使用要严格符合所有规定所有变量都必须先定义后才能使用

基本数据类型

数值类型
整数类型
  • byte 占1个字节范围

    byte num1 = 10;
    
  • short 占2个字节范围

    short num2 = 20;
    
  • int 占4个字节范围

    int num3 = 30;
    
  • long 占8个字节范围

    long num4 = 30L;
    
浮点类型
  • float 占4个字节

    float num5 = 50.1F;
    
  • double 占8个字节

    dounle num6 = 3.1415926;
    
字符类型
  • char 占2个字节

    char name = 'A';
    

boolean类型(布尔值)

  • 占1位其值只有true和false两个

    boolean flag = ture;
    //boolean flag = false;
    

整数拓展

进制 二进制ob 十进制 八进制0 十六进制0x

int i =10;
int i2 =010;//八进制0
int i3 = 0x10;//十六进制

浮点数拓展

  • float 有限 离散 舍入误差 大约 接近但不等于

  • BigDecimal 数学工具类

    img

字符拓展

  • 强制转换

    img

  • 转义字符

布尔值拓展

boolean flag = true;
if (flag==true){}
if (flag){}

类型转换

运算中,不同类型的数据先转化为同一类型,然后进行运算

byte,short,char->int->long->float->double

  • 强制类型转换

    (类型)变量名 高->低

int i = 128;
byte b = (byte)i;//内存溢出
  • 自动变量转换

    低->高

int i = 128;
double b = i;

注意点:

  • 不能对布尔值进行转换
  • 不能把对象类型转换为不相干的类型
  • 在把高容量转换到低容量的时候,强制转换
  • 转换的时候可能存在内存溢出或者精度问题

操作比较大的时候,注意溢出问题

JDK7新特性,数字之间可以用下划线分割

int money = 10_0000_0000;

变量

变量就是可以变化的量

注意点

  • 每个变量都有类型,类型可以是基本类型,也可以是引用类型
  • 变量名必须是合法标识符
  • 变量声明是一条完整的语句,因此每一个声明必须以分号结束

类变量 static

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tudlth8j-1625576527053)(E:\image-20210429221735330.png)]


常量

初始化后不能再改变的值,不会变动的值

常量名一般使用大写字符

变量的命名规范

  • 所有变量、方法、类名:见名知意
  • 类成员变量:**首字母小写和驼峰原则:moneySalary 除了第一个单词以外,后面的单词首字母大写 **
  • 局部变量:首字母小写和驼峰原则
  • 常量:大写字母和下划线:MAX_VALUE
  • 类名:首字母大写和驼峰原则:Man,GoodMan
  • 方法名:首字母小写和驼峰原则:run(),runRun()

运算符

  • 算数运算符:+,-,*,/,%,++,–
  • 赋值运算符=
  • 关系运算符:<,>,>=,<=,==,!=instanceof
  • 逻辑运算符:&&,||,!
  • 位运算符:&,|,^,~,>>,<<,>>>
  • 条件运算符?,:
  • 扩展赋值运算符:+=,-=,*=,/=

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nr3swNSF-1625576527056)(E:\image-20210430202215835.png)]

运算数值里有long类型,结果为long类型,如果没有,结果则为int

同理,如果里面有double类型,则结果为double类型

关系运算符通过布尔值体现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pUIH9pUO-1625576527057)(E:\image-20210430202550808.png)]

很多运算会使用工具类来做

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hK8w8tdf-1625576527058)(E:\image-20210430204842520.png)]

逻辑运算

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BTaOqomr-1625576527059)(E:\image-20210430214335303.png)]

短路运算

boolean a = true;
boolean b = false;

System.out.println(a && b);//true
System.out.println(b && a);//false

//&&第一个为真,则运算结果为真,第一个为假,则运算结果为假

位运算

/*
A = 0011 1100
B = 0000 1101

A&B = 0000 1100    上下相乘
A|B = 0011 1101    如果上下都是0,则为0,有一个1则为1
A^B = 0011 0001    相同则为0,不同则为1
~B = 1111 0010     与B完全相反

2*8 = 16      
<< 左移  相当于*2
>> 右移  相当于/2

2<<3

*/

字符串连接符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gXoyaAjz-1625576527061)(E:\image-20210430220350500.png)]

""+a+b //字符串在前面,后面进行拼接
a+b+""//字符串在后面,先运算在拼接

三元运算符

x ? y : z

如果x==true,则结果为y,否则结果为z

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lfDqsN46-1625576527061)(E:\image-20210430221400712.png)]


包机制

为了更好的组织类,Java提供了包机制,用于区别类名的命名空间

包语句的语法格式为

package pkg1[. pkg2[. pkg3...]];

一般利用公司域名倒置作为包名

为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用“import”语句可完成此功能

import package1[.package2...].(classname|*);

JavaDoc

api在线文档

JavaDoc是用来生成自己的API文档的

参数信息

  • @author 作者名
  • @version 版本号
  • @since 指明需要最早使用的jdk版本
  • @param 参数名
  • @return 返回值情况
  • @throws 异常抛出情况

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EtXUprqc-1625576527062)(E:\image-20210510204502686.png)]


Java流程控制

用户交互Scanner

java.util.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入

Scanner s = new Scanner(System.in);

通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据

  • next()方法

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZIVD5GhO-1625576527063)(E:\image-20210510223157286.png)]

    只输出一个hello

  • nextLine方法

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j5lbnBrx-1625576527063)(E:\image-20210510223739896.png)]

    输出全部hello world

    注意:

next():

  • 一定要读取到有效字符后才可以结束输入
  • 对输入有效字符之前遇到的空白,next()方法会自动将其去掉
  • 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
  • next()不能得到带有空格的字符串

nextLine()

  • Enter为结束符也就是说nextLine()方法返回的是输入回车之前的所有字符
  • 可以获得空白

代码最后一定要关闭流[scanner.close();]


Scanner进阶使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VzefiwAF-1625576527064)(E:\image-20210510230642277.png)]

利用while循环计算平均数


顺序结构

Java的基本结构就是顺序结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gErQHoJT-1625576527064)(E:\image-20210512194756949.png)]


选择结构

if单选择结构

if(布尔表达式){
//如果布尔表达式为true将执行的语句
}

if双选择结构

if(布尔表达式){
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为false
}

if多选择结构

if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else{
//如果以上布尔表达式都不为true执行代码
}
注意:
  • if语句至多有 1 个else语句,else语句在所有的else if语句之后
  • if语句可以有若干个else if语句,他们必须在else语句之前
  • 一旦其中一个else if 语句检测为true,其他的else if以及else语句都将跳过执行

嵌套的if结构

if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
	if(布尔表达式 2){
		//如果布尔表达式 2的值为true执行代码
	}
}

switch多选择结构

switch case语句判断一个变量与一系列值中是否相等,每个值称为一个分支

switch 语句中的变量类型可以是:

  • byte、short、int或者char
  • 从Java SE 7开始switch 支持字符串String类型了
  • 同时case标签必须为字符串常量或字面量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VnK1WkcF-1625576527065)(E:\image-20210513201118983.png)]


循环结构

while循环

结构:

while(布尔表达式){
//循环内容
}

注意:

  • 只要布尔表达式为true,循环就会一直进行下去
  • 我们大多数情况是会让循环停止下来的,我们需要一个表达式失效的方式来结束循环
  • 少部分情况需要循环一直进行,比如服务器的请求响应监听等
  • 循环条件一直为true就会造成无限循环【死循环】,我们正常的业务编程中应该尽量避免死循环

死循环

while(true){

}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NdsSHGrl-1625576527065)(E:\image-20210513202620764.png)]

do…while循环

do…while循环至少会执行一次

do{
//代码
}while(布尔表达式);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nbVcplHy-1625576527066)(E:\image-20210513203702724.png)]

while和do…while的区别:

  • while先判断后执行,do…while先执行后判断
  • do…while总是保证循环体至少会被执行一次

for循环

for循环语句是最有效、最灵活的循环结构

for(初始化;布尔表达式;更新){
//代码
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VFSrbPI5-1625576527067)(E:\image-20210513205344119.png)]

注意:

  • 最先执行初始化步骤,可以声明一些初始化类型,但可初始化一个或多个循环控制变量,也可以是空语句
  • 检测布尔表达式的值,如果为true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句
  • 执行一次循环后,更新循环控制变量
  • 再次检测布尔表达式,循环执行上面的过程

九九乘法表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nNCpWgr6-1625576527068)(C:\Users\Irene Adler\AppData\Roaming\Typora\typora-user-images\image-20210517200225876.png)]


增强for循环

for(声明语句:表达式){
//代码
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qwsoKv8b-1625576527068)(C:\Users\Irene Adler\AppData\Roaming\Typora\typora-user-images\image-20210517201327596.png)]

break continue

break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z8pA2p66-1625576527069)(C:\Users\Irene Adler\AppData\Roaming\Typora\typora-user-images\image-20210517201702180.png)]

continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ki94Qit1-1625576527069)(C:\Users\Irene Adler\AppData\Roaming\Typora\typora-user-images\image-20210517202112613.png)]

区别:

  • break在任何循环语句的主体部分,均可用于break控制循环的流程
  • break用于强行退出循环,不执行循环中剩余的语句
  • continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定

打印5行三角形

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B0Du0AxH-1625576527069)(C:\Users\Irene Adler\AppData\Roaming\Typora\typora-user-images\image-20210517203745082.png)]


Java方法详解

方法是语句的集合,他们在一起执行一个工程

方法是解决一类问题的步骤的有序组合

方法是包含于类或对象中

方法在程序中被创建,在其他地方被引用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vP088o7P-1625576527070)(C:\Users\Irene Adler\AppData\Roaming\Typora\typora-user-images\image-20210517205535839.png)]

原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成一个功能,这样利于我们后期的扩展

方法的定义

Java的方法类似于其他语言函数,是一段用来完成特定功能的代码片段

方法包含一个方法头和一个方法体

语法:

  • 修饰符:这是可选的,告诉编译器如何调用该方法,定义了该方法的访问类型

  • 返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType是关键字void

  • 方法名:是方法的实际名称。方法名和参数表共同构成方法签名

  • 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。

    形式参数:在方法被调用时用于接收外界输入的数据。

    实参:调用方法时实际传给方法的数据。

  • 方法体:方法体包含具体的语句,定义该方法的功能。

修饰符 返回值类型 方法名(参数类型 参数名){
	...
	方法体
	...
	return 返回值;
}

方法调用

  • 调用方法:对象名.方法名(实参列表)

  • Java支持两种调用方法的方式根据方法是否返回值来选择

  • 当方法返回一个值的时候,方法调用通常被当作一个值。例如:

    int larger = max(30,40);
    
  • 如果方法返回值是void,方法调用一定是一条语句。

    System.out.println("Hello");
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hqx28J6V-1625576527070)(C:\Users\Irene Adler\AppData\Roaming\Typora\typora-user-images\image-20210706202406677.png)]

方法的重载

  • 重载就是在一个类中,有相同的函数名称,但形参不同的函数。

  • 方法重载的规则:

    1**>方法名称必须相同。**

    2>参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)

    3>方法的返回类型可以相同也可以不同。

    4>仅仅返回类型不同不足以成为方法的重载。

  • 实现理论:方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器会报错。

命令行传参

有时候你希望运行一个程序的时候再传递给它消息。这要靠传递命令行参数给main()函数实现

public class CommandLine{
	public static void main(String args[]){
		for(int i=0;i<args.length;i++){
			System.out.println("args[" + i +"]:" + args[i]);
		}
	}
}

可变参数

  • 在方法声明中,在指定参数类型后加一个省略号(…)
  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通参数必须在它之前声明

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pYFBe4PU-1625576527071)(C:\Users\Irene Adler\AppData\Roaming\Typora\typora-user-images\image-20210706210005708.png)]

方法的重载

  • 重载就是在一个类中,有相同的函数名称,但形参不同的函数。

  • 方法重载的规则:

    1>方法名称必须相同。

    2>参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)

    3>方法的返回类型可以相同也可以不同。

    4>仅仅返回类型不同不足以成为方法的重载。

  • 实现理论:方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器会报错。

命令行传参

有时候你希望运行一个程序的时候再传递给它消息。这要靠传递命令行参数给main()函数实现

public class CommandLine{
	public static void main(String args[]){
		for(int i=0;i<args.length;i++){
			System.out.println("args[" + i +"]:" + args[i]);
		}
	}
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值