Java基本语法和规范

语言按程序的执行方式分为编译型和解释型两种。
编译型:需要使用专门的编译器,针对特定平台(操作系统)翻译成可被该平台执行的机器码,编译生成的可执行程序可以脱离开发环境在特定平台独立运行,运行效率高,但因为编译型语言的程序被编译成特定平台的机器码,所以无法转移到其他平台运行。如:C C++
解释型:相当于把编译和解释过程同时完成,每次执行程序都进行一次编译且解释执行,所以执行效率较低。优势:跨平台容易,只需提供特定平台的解释器即可,如:Python javascript
java语言:不彻底的编译(编译成字节码文件),又有解释(每次运行时,将字节码翻译成对应平台的机器指令),先编译成与平台无关的字节码文件,再通过JVM(java虚拟机)解释执行,虽然各平台的JVM都不相同,但所有平台上的JVM向编译器提供相同的编程接口,编译器只需要面向虚拟机生成虚拟机能够理解的代码,然后由虚拟机来解释执行,字节码文件在各个平台都可以用相应的JVM运行,因此可以跨平台运行。
执行Java程序的两个步骤:
(编译器)使用javac编译 JVM虚拟机解释执行(java)
Java源文件--------------------------------->字节码文件(.class文件)------------------>特定平台的机器码
计算机语言:人与计算机之间交互所使用的 语言
计算机语言发展史:
第一代:机器语言,编写二进制码,不需要转换,打孔机为代表
第二代:低级语言,出现少量单词
第三代:高级语言c java python c++ 等
Java语言发展史:java之父:James Gosling
1991年sum公司JamesGoling领导green计划开发oak语言(因公司门前橡树取名)
1992年oak开发完成不能取得商业使用,发展被搁置
1994年完成java因oak商标被注册,改名为java(源自开发者手上的一杯hot java)
1995初sum公司发布java语言放到互联网,免费供大家使用,web技术规模流行,java开发者为web页面提供了动态内容(applet)
1996年sum公司发布JDK 1.0,包含两部分:运行环境(JRE)和开发环境(JDK)
java语言包括三大块
J2SE(JDK5.0后改名JavaSE):平台标准版,可以做桌面程序开发
J2EE(JDK5.0后改名JavaEE):平台企业版,可以做企业级应用:管理系统、网站
J2ME(JDK5.0后改名JavaME):平台微型版,可以做移动端程序开发
计算机组成:
硬件:CPU(中央处理器)、输入设备、输出设备、存储设备、其他设备
CPU包括控制器和运算器:主要处理内存条中运行的数据
软件:系统软件:windows7 windows8 mac linux
应用软件:B/S:(browser)浏览器/服务器,可以直接在网页中使用的软件,如:12306
C/S(client):客户端/服务器,先下载,后应用,各种桌面软件
绝对路径:非常详细的路径 相对路径:相对当前所在位置的相对位置。
Java语言特性:
简单性:java舍弃了C++中难以掌握并不安全的功能,如:多继承、指针,java语言底层是C++实现的
面向对象;java和C++一样,是一种面向对象编程语言
安全性:如:运行时堆栈溢出,强制类型检查
健壮性:java语言在运行过程中产生的垃圾会自动回收,简称GC机制
可移植性:java程序编译一次,不做任何修改时到处运行,也就是跨平台。在不同操作系统上安装不同的JVM

JDK、JRE、JVM之间关系:
JDK开发工具包
JRE:java运行环境
JVM:java虚拟机
JDK包含JVM和JRE,JRE = JVM + 各种基础类库 + java类库(Sring\System)JRE包含JVM JVM不能单独安装,如果只运行程序,可以安装JRE,如果需要开发程序,安装JDK。 http://www.oracle.com/
安装路径:建议安装在根路径下,如:D:\JAVA\jdk-11.0.1
bin目录:主要包含java、javac等JDK的各种工具命令
Include:主要包含了一些java与C交互的头文件
Jmods:java的各个模块的jmod文件,从java9开始,庞大的java系统被分成各种不同的模块,从而使得java更加轻量化。
Lib:src.zip,该文件存放了java se的所有源代码,后期可以通过这些源代码进行学习优秀的java代码。
配置环境变量:右键计算机—>属性—>高级系统设置—>环境变量—>path前加JDK文件中bin目录的绝对路径。所有希望在命令行使用的工具,都应该将这些工具(所在路径)添加PATH环境变量中即可。
JAVA_HOME:告诉Eclipse、Tomcat、Ant、Maven、CXF、Activiti…JDK安装在哪个目录。
配置JAVA_HOME环境变量:右键计算机—>属性—>高级系统设置—>环境变量—>新建----->变量名:JAVA_HOME 变量值:JDK所在路径
Windows配置path环境变量:右键计算机—>属性—>高级系统设置—>环境变量—>path最前面加%JAVA_HOME%/bin 其中%JAVA_HOME%表示引用已有JAVA_HOME环境变量的路径。
Linux、MacOS:写$JAVA_HOME/bin $JAVA_HOME引用已有的JAVA_HOME环境变量的路径。

避免文件后缀过多(如:*.java.txt),且默认被隐藏,导致文件类型错误,因设置不隐藏扩展名,步骤:资源管理器(计算机)----->组织----->文件夹和搜索选项---->查看---->隐藏已知文件类型扩展名(去掉√)
Windows常用dos命令
Javac -version 查看JDK当前版本
Dir:查看当前目录中包含所有的目录及文件。Linux用ls
cd\返回当前目录的根目录 \代表根目录
mkdir/md:创建文件夹
编译java程序:Javac -d(目录) 源文件 -d指定将生成的’字节码文件’放到指定位置。
运行java程序:java 类名
Java -cp 目录1;目录2 类名 :系统到cp选项所指定的系列目录下找类(覆盖classpath环境变量的值)
Java文件命名,必须以.java结尾且文件名与定义为public的类名一致
Jshell工具(java9开始新增工具):相当于python交互式解释工具,命令行输入jshell进入。
输入/exit退出交互工具,交互式工具的目的:能让学习者、工作者迅速测试某个功能。

注释:单行注释://注释内容 多行注释:/注释内容/
文档注释:语法:/注释内容/ 只能放在类、成员变量、方法、构造器、内部类之前才有意义,javadoc默认只提取public或protected成员之前的文档注释。
javadoc工具可以提取文档注释来生成API文档
API文档:为java类提供的实用说明书。
生成文档注释,语法:
Javadoc -d(目录) 源文件 -d指定生成的“api文档”放到指定的位置
当方法中有参数时,需要在文档注释中加语法:@param 参数名 参数说明
当方法中有返回值,需要加语法:@return 返回值说明 如:
/
*
*@param a 第一个加数
*@param b 第二个加数
*@return 返回的是a、b的和
*/
public int add(int a,int b)
{
Return a + b
}
Public class 和 class的区别:public为修饰词可有可无,如果使用public修饰类,则文件名必须与修饰类名一致,如果没有public修饰,则文件名可以和类名不一致(建议一致),编译成功后会生成对应类名的字节码文件。
类中main方法可有可无,如果没有,能编译成功,但是不能运行,一个文件编写多个类,编译成功后会生成对应类的个数的字节码文件,一个文件最多有一个类前面使用Public修饰.

配置classpath:使得编译和运行指定一个路径,在文件的任何位置都能编译和运行。
在JDK1.4以前,使用java 类名语法不会在当前路径下搜索(没有设计这个功能),因此必须配置classpath环境变量,除此之外,编译和运行java程序还需要JDK的lib路径下的dt.jar和tools.jar文件中的java类,因此还要将两个文件添加到classpath环境变量里,JDK11已经将这两个文件删除。如果使用jdk1.4以后版本,无需配置也可以在当前目录搜索。
临时配置:set classpath=绝对路径
如:set classpath= D:\计算机学习\java\java_project\day-01
Set classpath=D:\计算机学习\java\java_project\day-01;.; 后加;.;表示先在绝对路径中寻找,如果找不到会在当前目录找,如果需要写多个路径,则用英文分号隔开。
关闭dos命令窗口或者设置set classpath= 都能删除classpath临时配置
永久配置classpath:到环境变量中配置。新建—>变量名:classpath 变量值:绝对路径

标识符:就是一个名字,如类名、变量名、接口名、方法名、包名等。用于给程序中变量、类、方法命名的符号。
标识符命名规则:以字母、下划线_或开头,其后可以是字母、数字、下划线或开头,其后可以是字母、数字、下划线或开头,其后可以是字母、数字、下划线或,不能使用关键字。
标识符命名规范:
1、见名知意(编写对应单词意思)
2、类中每个单词首字母大写
3、变量名称、方法名称、参数名称采用驼峰命名法:除首单词外其后单词首字母大写
4、标识符长度不要超过15个字符。
5、可以由字母、数字、下划线和$组成,但数字不能放开头.
6、不能包含空格和其他特殊符号,不能只是关键字,但可以包含关键字。
如:保留字:goto、const和直接量:true、false、null不能作为标识符

字面值(直接量):其实就是一个数据(值),根据字面值知道数据类型。
整数类型字面值、浮点类型字面值、字符串类型字面值、字符类型字面值、布尔类型字面值

关键字:在java中具有特殊意义的,全部用小写字母。共51个

true,false,null不是关键字,但也不能使用这三个特殊的直接量命名。
goto,const是保留字(暂时没有使用,以后可能使用)

Java是“强类型”的语言:1、所有变量必须要先声明、后使用。2、指定类型的变量只能只能接受类型与之匹配的值。所以每个变量和表达式都有一个在编译时就确定的类型。
弱类型语言可以直接使用。
变量:用来存放数据,可变化的数据,在计算机内存开辟一块记忆空间。
程序所用的的数据都保存在内存中,变量可以看成一个盛装数据的有名称的容器,每个变量代表了某一小块内存,程序对变量赋值,实际上就是把数据装入变量所代表的内存区的过程。
操作:声明变量(int a;)---->赋值(a =10)----->使用
声明并赋值多个变量:int a =10,b = 200,d=15;
分类:
按作用位置(声明位置)分为:
局部变量:在方法中声明的
成员变量:在类中声明的。
按数据类型分为:
基本数据类型变量:在内存中存放真正的值,包括:数值类型和boolean类型
引用数据类型变量:在内存中存放的内存地址(引用)包括:String、接口、数组、null等
引用数据类型实际是对一个对象的引用,对象包括实例和数组。空引用(null)可以转换为任何引用类型,即可以为所有引用类型赋值,是一个引用类型的特殊的直接量。
基本数据类型:分为4大类,8种
整数类型:byte short int long 整数类型默认为int
取值范围:

2^6=64 2^8=256 2^10=1024 2^16=65536 2^20=M(百万) 2^30=G(十亿) 2^40=T
存储单位:8bit = 1byte 1024byte = 1kb 1024kb = 1mb 1024mb = 1gb 1024gb = 1tb

常用进制:二进制、八进制、十进制、十六进制。
二进制整数以0b或0B开头,八进制以0开头,十六进制以0x或0X开头。十六进制的1015分别以af来表示。
二进制与十进制之间转换:
十进制转二进制:除二取余法 二进制转十进制:乘2叠加法

二进制转8进制:每三位数代表8进制的一位,如0b011 010 001 ----->0321
二进制转16进制:每四位数代表16进制的一位,如:0B0 1101 0001----->0x0d1
当定义32位的二进制整数时,最高位其实是符号位,符号位为1表示负数,为0表示整数,因为整数值默认是int类型,二进制整数默认占32位,第32位就是符号位,如:
Int a = 0B10000000000000000000000000000011;
以上的a就是负数,计算机里以补码的形式保存所有的整数(在程序中写的二进制数字就是补码),正数的补码和原码一样,负数的补码是原码的反码加1,反码是对原码按位取反,只是最高位(符号位)保持不变。
将a换算成十进制输出:
补码:10000000000000000000000000000011 即给a赋值的二进制数
反码:11111111111111111111111111111100 补码按位取反
原码:11111111111111111111111111111101 反码+1
所以输出得到该原码的值为:-2147483645
若在二进制整数后加l或L后缀,则这个二进制整数默认占64位,第64位为符号位。如:
long b = 0B100000000000000000000000000000011L;
以上的b是一个正数,虽然32位是1,但后缀加了L表示该整数位L类型,占64位,64位才是符号位,所以b是一个整数,值为2^32 + 2 + 1
定义8位的二进制整数,数值默认是占32位,是一个正数,但由于强制转换成byte时产生溢出,溢出规则用该数-目标类型的大小n(保证n取值后,减后的值在目标类型的取值范围内,且为范围内最小的整数)导致c变成了-23如下:
byte c = 0B11101001;// c最后的值为-23
计算二进制数得到:232,溢出后c = 232 - 256
1 = -23;

浮点类型:float double 浮点类型默认为double,希望一个浮点值当成float处理,必须在值后加f或F。浮点类型都有精度丢失,float丢失更严重,所以浮点数比较时 ,应该用“差值法”,如:
double f1 = 0.01, f2 = 0.05 //由于精度丢失,f1 + f2 不等于0.06,所以不能用f1+f2==0.06做比较.
System.out.println(f1 + f2 - 0.06 <0.0001) //差值法,减0.06后小于一个很小的数,说明为true

如果编译出现非法字符:一般是因为输入了全角字符,需要换成半角字符。
取值范围:

科学计算法:5.12e2(即5.1210^2) 公式:数eN=数10^N只有浮点数能用科学技术法。2e-6的值为,2乘以10的-6次方,只要用科学计数法,就一定是浮点数。如:51200是int类型,但512e2是浮点类型。
浮点数:正数除0,得到正无穷大(Infinity)负数除0,得到负无穷大(-Infinity),0除0得到非数(NaN,即not a number),所有正无穷数相等,所有负无穷数也相等,非数和任何数都不相等,和自己也不相等。
只有浮点型除以0才能得到正无穷大或负无穷大,因为java会把0当成0.0处理,如果是整数除以0,会报异常:ArithmeticException
定义二进制数是,位数过高可以使用下划线分隔,如:int a = 0B1111_0000_1111_0000;

字符类型:char 字符类型一次只能存放一个字符,使用英文单引号引起来。可以存转义字符、普通字符、字符的Unicode编号。
表示方式:\u十六进制 如:\u00a 表示换行。
一个汉字表示一个字符。整数值能给字符类型直接赋值,字符中存放的就是ASCII对应的字符,如:char ch = 100; //此处ch为d,因为a对应97。Char字符取值范围为:0—65535,占2个字节,char ch = -1 会报错,同时,整数类型也可以直接用字符赋值,如:Int i = ‘a’;//此处i为97.即字符当成无符号整数使用,实际使用的是字符的编号。如果是将int类型转换成char,即将取值范围大的类型赋值给范围小的类型,需要进行强转,如 int a = 65, char = (char)a; byte、short、int、chart类型,如果要赋值的数值在取值范围内,都可以直接赋值。如char ch = 100+5;这个式子是对的 ,但char a = 5; char cd = 100 + a;这个式子会报错,在表达式中有变量 + 数值,则数值会默认当成Int类型处理,所以会报错。

字符集:为了在计算机底层保存字符,为所有字符编号,计算机在保存某个字符时,只是将该字符的编号转换成二进制码,然后保存起来,读取字符内容时,读取是二进制的编号,还需要参照编号表才能得到对应的字符。(字符集实际就是为所有字符进行编号)所以字符型也可以当成基本数据类型。
常用字符编码:
ASCII:只支持英文、数字、标点符号,只占一个字节,即能存放2^8次方(256)个字符
Iso8859-1:西欧编码语言,兼容ASCII
GB2312(中文简体字符集):中文编码------->GBK----->GB18030(字符最多,目前的简体的字符集)

Unicode:统一全球所有国家的文字(java源代码采用unicode编码)前256个字符(\u0000~\u00FF)和ASCII码中的字符完全重合
各字符对应编码数:
a----z 97 ~97+25 A----Z 65~65+25 09--------4857 \n----10 ‘------39 “-------34 \r-----13

乱码:由于编码和解码时用的字符编码不一致导致。
一个字节占八位,即可以存放2的8次方个编号,即可以存放2的8次方个字符,2个字节可以存放2的16次方,即可以存放2的16次方个字符。Unicode编码占两个字节。
转义序列符:\n换行 \t制表符 \输出\ \”输出” \’输出’
\u0000(Unicode转义序列符)输出一个空格

布尔类型:boolean 布尔类型只有两种取值,分别是True、false,布尔类型只占一个字节,

方法区中的常量池:存放.Class文件的一些数据,包括类、方法、解控中的常量等以及字符串中的字面值。

Long d = 6//取值范围小的可以直接赋值给取值范围大的,构成自动类型转换
d = 12345678901//会出现编译错误,整型默认为Int,该数值超过Int范围。
解决办法:在右侧的数据后加L或l,此时该值为Long,构成强制类型转换。
float y = 0.87 //出现编译错误,原因:浮点型默认为double,取值范围大的类型不能直接给取值范围小的类型赋值
//解决办法一:在数据后添加f或F,然后再给左侧float赋值,如:float y = 0.87f;该处没有构成类型转换。
//方法二:进行强制类型转换,在值前面添加(类型) 如:float y = (float)0.87,构成类型转换。
需要将一个float类型数据当成double处理,可以在数据后加D或d。
如果是整型,只要赋值的数值在类型的范围内,可以直接进行赋值。如:byte =97 + 1;此代码在编译的时候,已经计算完成,相当于byte=98 ,在byte范围之内,赋值成功。如果赋值的数值超过127,就会得到默认的类型int。但是:byte a = 2; a = a+1//此时会报错,因为在表达式运算时,如果表达式有变量,类型会自动提升为最大范围的类型,编译时a并不知道是多少,此处1为Int类型,所以表达式默认为int类型,所以编译报错。

基本类型之间转换:
自动类型转换:也叫隐式类型转换,当取值范围小的类型赋值给取值范围大的类型时。
强制类型转换:也叫显式类型转换。当取值范围大的类型赋值给取值范围小的类型时。必须进行强制类型转换,进行强制类型转换可能存在精度丢失。
字符串和任何基本类型的值进行连接运算时,都会自动转换成字符串类型,将单个数值转换成字符串可以使用 10 + “” 这种加空字符串的方式。
System.out.println(3 + 4 + “hello”)//会输出7hello,会先进行运算再拼接,从左到右
System.out.println( “hello ” + 3 + 4)//输出hello34
Int a = 23/5 //此时a = 4 除出来的小数部分会去除,两个整数相除可以赋值
类型转换6条规则:
1、基本数据类型中除了Boolean类型以外,剩余7种类型可以进行相互转换。
2、取值范围小的类型可以直接给取值范围大的类型直接赋值。当取值范围小的类型赋值给取值范围大的类型,构成自动类型转换(隐式类型转换)
取值范围从小到大排序:
char当整数使用时,是无符号整数,且占两个字节,所以取值范围为:2^16 即0~65535
3、取值范围大的类型不能直接给取值范围小的类型赋值,要赋值必须进行强制类型转换(显式类型转换),但是可能存在精度丢失。会溢出,溢出规则:用该数-目标类型的大小n(保证n取值后,减后的值在目标类型的取值范围内,且为范围内最小的整数) 如:int a = 560 byte b = (byte)a;//则b的值=560-2562=48; 如:int c = 200,byte d = (byte)c则c=200- 2561=-56
4、当对整型byte short char类型赋值时,如果没有超过该类型取值范围,则可以直接赋值。
5、当对byte short char类型进行混合运算时,则需要转换成int类型再计算,
如:byte a= 3 short b = a int c = a + b//6 c = a + ‘A’ //68
表达式类型的自动提升:当多种数据类型进行混合运算时,则自动转为取值范围最大的类型,再运算,(即整个表达式的类型,与该表达式中最高级的操作数的类型相同)
6、将浮点型强制(显式)转换成整型时,小数点后的数会去掉。
例子:
Int a = 233;byte b = (byte)a;
上方将int转换成byte,int占32位,byte占8位。转换后会截取前面的24位,只保留右边8位,此时最左边的1是符号位,是负数,以补码的形式存在,需要转换成原码。如图:
32位的int类型:00000000000000000000000011101001
8位的byte类型: 前面被截取的24位 11101001 补码形式
11101000 反码形式
10010111 原码形式
-23 十进制数,第一位转换成符号位
公式:该数的补码 - 目标类型的大小
n(保证n取值后,减后的值在目标类型的取值范围内,且为范围内最小的整数)

直接量:指在程序中通过源代码直接给出的值,能指定直接量的通常只有三种类型:基本类型、字符串类型和null类型。如:int a = 10; float b = 1.2f; char c = ‘a’; Stirng d = “宏盛”;这些对变量所赋的值10、1.2f等就是直接量。
字符串直接量不能赋给其他类型的变量,null类型的变量可以赋给任何引用类型的变量,包括String类型,bolean类型的直接量只能赋给boolean类型的变量,不能赋给其他类型的变量。
当程序第一次使用某个字符串直接量时,Java会使用常量池(constant pool)来缓存该字符串直接量,如果程序后面的部分需要用到该字符串直接量时,Java会直接使用常量池中的字符串直接量。
常量池指的是在编译器被确定,并被保存在已编译的.class文件中的一些数据,包括类、方法、接口中的常量,也包括字符串直接量。

使用var定义局部变量(从java10开始才引入的特征,在java9以前都不行)
语法:var 变量名 = 值; //每个变量总有固定的类型,指定类型的变量只能装对应类型的值。
Var并不是关键字,var相当于一个动态类型,类型由java的编译器根据变量所赋的值来推断。
Var并没有改变java的本质,var只是一个简化写法–无论你是何种类型的局部变量,最终都可以使用val来声明,其类型由java的编译器根据变量所赋的值来推断。
很多语言都支持var定义变量,java10为了迎合开发者才引入var,对java功能没有任何影响。
注意:
1、Var只能在方法中定义变量(即只能定义局部变量),不允许在类中定义成员变量。
2、Var声明的变量,必须在声明的时候指定初始值,如果不指定,编译器无法推断类型。
3、Var每次只能声明一个变量!Var不允许在复合声明中使用。如:错误:var a = 1,b = 3.4;
使用var声明变量的优缺点:
优点:编程更简洁,代码可以更整齐。
缺点:使用var声明变量,会降低程序的可读性。
所以,如果声明变量时,为该变量指定了一个直观的初始值(5、2.3),此时可以使用var来声明变量。
如果变量所赋的值是很复杂的方法调用(很复杂的表达值),导致它的返回值类型并不直观,此时不应该用var声明,如:Var a = def(abc().xyz()); 此处a的类型很难看出,因此不应该使用var声明。除此之外,当变量的作用域很大的(即方法很长,)var变量影响很远,此时也不建议使用var声明。

算数运算符:+ - * / %求余 ++ –
当 + 号两边的操作数都是数值类型,则进行加法运算,当+号两边有一个为非数值类型,则+号作为连接符号,最终连接后的结果为String 如:
int a =3,b = 4;
System.out.println(“sum=” + a + b) //输出sum=34
System.out.println(“sum=” + (a + b))//输出sum=7
System.out.println(“sum” + a - b)//编译错误,因此,数值运算连接字符串时,建议加括号。
System.out.println(“sim=” + a*b)//输出sum=12 因为先算乘法,不报错,除法相同用法。
System.out.println(11/4)//2 因为两个数值都是Int类型,结果也为整型
System.out.println(7/2.0)//3.5 有浮点型的运算,结果都是浮点型。
System.out.println(4%6.0)//4.0 商0,余4
System.out.println(0%10)//0
System.out.println(6%0)//编译不出错,运行会报错,除数不能为0。
System.out.println(6%0.0)//NaN
System.out.println(5.0%0)//NaN
System.out.println(5.2%3.1)//2.1
//计算123数中各个位之和
int num =123;
int gw = num % 10;
int sw = num % 100 / 10;//int sw = num /10 %10
int bw = num / 100;
int sum = gw + sw + bw;
++表示自加:自身加1,++根据书写在变量名前后分为:前置++、后置++
前置++:先自身加1,再用变量的值(再做其他运算)
自加和自减都只能操作变量,不能操作数值、常量或表达式,如5++或6–都是错的。
Int a=3;
Int b = ++a//a=4 b=4 a自身加1,所以a=4,加完再做赋值运算,所以b = 4
后置++:先用变量的值(做运算),后再自身+1,
Int x = 5;
Int y = x++ +5;//x=6 y=10 先运算,即y = 5+5=10 运算完后x自加1,即x= 6
–表示自减:自身减1,–根据书写在变量名前后分为:前置–和后置–
前置–:先自身减1,再用变量的值(再做其他运算)
后置–:先用变量的值(做运算),后再自身-1,
int x=30,y=18;
int z = x++ - --y + y++/2 + ++x - --x + y;
System.out.println(“x = " + x + " y = " + y + " z =” + z); //输出x=31 y=18 z=40
运算逻辑:x++是先运算再自加,在运算到-号时即自加1,此时x为31,因此,下一个++x的值为31+1,然后代入表达式运算。
完成复杂运算:如乘方、开方等,需要导入模块:import java.lang.Math Math类提供了一些工具方法,完成初高中的数学运算,Math可以不用导包,直接用
Double a = 2.5,
Double b = Math.pow(a,5);//表示求a的5次方
Double c = Math.sqrt(a); //表示求a平方根,即开方
Double d = Math.random();//表示返回一个0~1之间的伪随机数
Double e = Math.sin(1.57); //表示求1.57的sin函数值
Double f = Math.round(4.5);//四舍五入,5
Double g = Math.ceil(4.5);//向上取整 5
Double h = Math.floor(4.5);//向下取整4
连接运算符:+ 作用:求和、连接
赋值运算符:= 将右侧的值赋给左侧的变量名称。
定义多个变量,一次赋值多个变量,Int a,b,c; a = b = b = 7;
扩展的(复合)赋值运算符:+= -= *= /= %=
当使用扩展的(复合)赋值运算符时,变量最终的数据类型没有发生改变。
int c = 10;
c = x + 0.5;//会报错,显示不兼容的类型,10.5为double类型,是取值范围大的类型,不能给取值范围小的int类型赋值,
C += 0.5;//结果为x =10,有扩展赋值运算符时,数据类型不会改变,会自动完成类型转换。
C += 0.5 相当于 c = (c的类型)(c+0.5)
Day02代码笔记

位运算符:只能对整型(byte short int long char)运算,针对二进制码进行运算的。
负数的二进制码保存的是补码,所以需要先将原码转换成补码,先用源码按位取反得到反码,反码+1得到补码,整数的原码跟补码是一样的。对比的是补码。如果最后的结果还是负数,补码需要换算成源码进行计算,补码-1得到反码,反码取反得到原码。

&:按位与。上下两位都是1时,得到的结果才是1
int占四个字节是32位,所以要32位二进制 码
先将数字转换成二进制码
23:0000_0000_0000_0000_0000_0000_0001_0111
69:0000_0000_0000_0000_0000_0000_0100_0101

0000_0000_0000_0000_0000_0000_0000_0101
System.out.println(23 & 69);//按位与,所以两个都是1,二进制码才是1,最后结果是5
|:按位或。上下两位有一个是1时,得到的结果就是1.当表示状态时,会用特定的数代表开关,表示文本状态:粗体(1即00000001)、斜体(2即00000010)、下划算(4即00000100)、中划线(8即00001000)等。粗体加斜体就是000000011 = 1 |2
Day-02位运算符
:按位取反,原来是0变成1,原来是1变成0。正数结果变成—(绝对值+1)(如5,结果为-6)。负数结果变成+(绝对值-1)。
^:按位异或,上下两位相同的时候得到的结果是0,不同的时候得到的结果是1
<< :左移,左移N位就相当于原数乘以2的n次方,2乘以8,最快的算法:2 << 3(相当于得到2 * 2^3)将一个数扩大一倍,只需要左移1位,如int a = 1, a << 1

:右移,右移N位就相当于原数除以2的n次方,2 >> 3 (相当于2 / 2^3)
//右移三位,除以2的3次方
//除不尽的情况下,实际结果总是比除得结果略小的整数
System.out.println(34 >> 3);//4 结果为4.几,略小就是4
System.out.println(-34 >> 3); //-5,结果为-4.几,略小于-4.几,结果-5

:无符号右移,如果被移位的数是正数,那么该运算符与>>运算符一样,如果被移位的数是负数,被空出来的高位总是补0----这个数就会变成正数。

关系运算符:> < >= <= == !=不等 结果为true 或false 运算优先级:
Boolean b = 7/4 + 5%2 == 16/8 -5*2%3/
逻辑运算符:逻辑与& 逻辑或| 逻辑异或^ 逻辑非! 短路与&&短路或|| 结果为boolean
逻辑与:表示而且,两边都为true,则结果为true ,否则为false
逻辑或:表示或者,只要一边为true 则结果为true,两边为false时才为false
逻辑异或,当两边结果相同时为false.当两边的结果不相同时得到true。
逻辑非:表示对boolean类型的值取反,加运算条件时需要在运算条件加括号,如:!(1 > 9);
短路与:类似于逻辑与,都表示并且,短路与、逻辑与的运行结果都相同,但是执行过程可能不同,当使用短路与,并且第一个条件为false时,则结果直接为false,第二个条件不会判断。
短路或:类似于逻辑或,都表示或者,短路或、逻辑或的运行结果都相同,但是执行过程可能不同,当使用短路或,并且第一个条件为true时,则结果直接为true,第二个条件不会判断。
编程中,建议使用短路与和短路或,

= 与==,=属于赋值运算符,将右侧的值赋给左侧的变量名称
==属于关系运算符,判断左右两边的值是否想等,结果为boolean类型
优先运算级别:算数运算符>关系运算符>逻辑运算符

三目运算符:也叫条件运算符。
语法格式:条件?条件为true执行的代码1:条件为false执行的代码2
判断一个数,如果大于0,则输出1,如果小于0,则输出-1,否则输出0
Int a = 0, String i = a > 0?”1”:(a==0?”0”:-1)
三目运算符的嵌套:嵌套后可以返回3个或更多的值
条件1?代码1:(条件2?代码2:代码3)//条件1位false执行的代码需要括号()

键盘接收用户输入:
第一步:导包import java.util.Scanner
第二步:创建Scanner对象 Scanner input = new Scanner(System.in);
第三步:友好提示,打印个消息,让用户知道该干啥
System.out.print(“请输入一个数:”);
第四步:键盘输入
int a = input.nextInt();
键盘输入接收字符串类型时,没有nextString()而使用的是next(),如:
String s = input.next();
键盘不能接收字符类型,而是先接收字符串类型,然后在字符串中获取第0个位置中的值,需要使用charAt(0)方法进行获取,语法:字符串名.charAt(获取的位置) 如:
String gender = input.next();
gender.charAt(0);

顺序结构:按顺序逐行代码进行执行。
程序流程控制有两大结构:
选择结构:
If 选择结构,语法格式:if(条件){
条件为true执行的代码块
}
当if语句代码块只有一条语句时,大括号{}可以省略,省略后相当于if只有一条语句,再写语句,就不包含在括号内,不管条件是否为ture,都会默认执行,此时,if条件只控制到紧跟if条件的第一个分号;
If else选择结构
语法:if(条件){
条件为true执行的代码块
}
else{
条件为false执行的代码块
}
多重if选择结构:当做两种或两种以上的情况时,则可以使用多重if选择结构完成。
If(条件1){
条件1满足时执行的代码块1
}else if(条件1不满足时判断的条件2){
条件2满足时执行的代码块2
}
If中的else是可有可无的,如果有,编写在多重If最后,最多编写一个,当所有条件都不满足时才执行。
多重if选择结构中的条件顺序可以颠倒,但是有可能会影响程序的运行结果。所以处理条件时,先处理条件范围最小的。当颠倒顺序时,条件必须编写完整严谨。

If嵌套:
if(条件一){
If(条件二){ //条件一满足会继续判断条件二
If(条件三){ //条件二满足会继续判断条件三

}
}
}else{

}
String score==“第一名” /score是字符串类型,存放的内存地址,和第一名不会相等。因此字符串比较时,使用==比较的是地址是否一致。如果想要比较内容,则必须使用equals(),如果相等。则为true,否则为false.
当字符串进行比较内容时,建议固定值编写在前面。语法:值.equals(字符串变量名)
/
如: “第一名”.equals(score)

Swith case选择结构,当做等值操作时,可以使用swith case语法格式:
Swith(表达式)
{
case 常量值1(和表达式对比的值):
当常量值1和表达式相等时执行的代码;
break;
case 常量值2(和表达式对比的值):
当常量值2和表达式相等时执行的代码;
break;
case 常量值3(和表达式对比的值):
当常量值3和表达式相等时执行的代码;
break;
default:
当所有case都不满足时执行的代码;
}
注意:
Swith case中表达式只能是byte short int char类型,在JDK7.0及以后还可以是枚举类型,String类型但不能是StringBuffer或StringBuilder类型,也不能是boolean类型。
在switch中编写任意多个case,有几种情况就写几个case,case后边写常量值(即和表达式对比的值),常量值的类型必须与表达式的类型相同。执行完case下方代码后,遇到break,表示终止,则执行switch case外面的语句。
Default是可有可无的,如果有则一个swithc最多编写一个default,当所有case都不满足时,则执行default
Case后面常量值的顺序可以任意,一般按顺序编写。default也可以编写在任意位置。建议default编写在所有case的后面.Break可有可无,当没有编写break,java会先判断是否有相等的case值,一旦遇到相等的值,程序就开始执行这个case标签后的代码,不再判断后面case、default标签的条件是否匹配,从当前第一个匹配的case块开始执行,执行每个case下的所有代码(也就是穿透),除非遇到break才结束。

Java11编译器做了一些改进,如果开发者忘记了case块后面的break语句,Java 11编译器会生成警告:“[]fallthrough 可能无法实现case”,这个警告以前需要为javac -X:fallthrough选项才能显示出来。
根据题意适当编写break. case也可以合并
如多种情形下都执行同样代码块:
case ‘三’:
case ‘五’:
System.out.println(“自习”);

【主要两大注意点】:
1、switch语句后的括号的表达式数据类型只能是byte short char int四种整数类型,Java7还可以是枚举和String类型,
2、Case后代码块要跟一个break,否则会引入一个陷阱。

多重If与switch case区别:
多重if:可以做等值操作、也可以做区间操作。
Switch case:只能做等值操作
建议:等值操作时优先用switch case,其余操作只能用if。

循环概念:在java中做重复事情,并且重复的代码只编写一次
常用的循环:
for循环、while循环、do while循环。
循环特点:循环条件、循环操作(循环体)
for循环:
语法格式:
For(初始化语句;循环条件;迭代语句){
循环体(循环条件为true时执行的代码)
}
初始化语句完成变量的初始值,如:int i = 1;循环条件完成循环条件判断,如: i <=5;如果条件为true,则执行循环体,否则执行循环外面的语句。循环体主要做重复事情,重复做的事情在循环体只编写一次,循环体可以编写Java中任何语句。迭代语句完成变量值的更改如:i++ 初始化语句和循环条件都可以写多个。但是初始化语句只能有一个声明语句,所以如果要声明多个变量,这些变量应该具有相同的数据类型。
for(int i = 1;i <=5;i++){
System.out.print(“野兽,永不为奴”);
}
执行流程,先赋值i=1,然后判断1<=5,条件为true,执行循环体输出,再进行迭代i++.
即执行流程为:初始化语句—>判断循环条件–>循环体–>迭代语句—>判断循环条件->循环体—>迭代语句—>判断循环条件 直到循环条件为false时,结束循环,执行循环外的代码。
双重循环:也叫二重循环:在一个完整的循环中包含另一个完整的循环(即循环的嵌套)
for(初始化语句;循环条件;迭代语句)//外层循环
{
For(初始化语句(变量以及赋值等);循环条件;迭代语句)//内层循环
{
}
}
结论:当外层循环执行一次,内层循环执行一遍。
for循环注意事项:
For循环中的表达式都可以省略,但是分号必须编写。
如果三个表达式都省略,如for(;

Java基本语法和规范相关推荐

  1. 学习日报 day02 java的语法骨架 myeclipse编辑java代码

    学习日报 day02 java的语法骨架 myeclipse编辑java代码 https://cloud.189.cn/t/3MJrm2MRNBRf 开发前的基本知识 java环境名词解释 JRE J ...

  2. 【Java 强化】代码规范、JavaBean、lombok、内省(Introspector)、commons 项目、注解详解

    Java 强化 代码规范(包.类.接口.方法.变量.常量名) 主板加载通信组件案例(知识点回顾) 面向接口编程 + 集合 + 匿名内部类 加载资源文件 + 反射 JavaBean 规范 Lombok ...

  3. (31)Java基础语法 --接口

    目录 1.接口的概述 2.接口的定义格式 3.在接口中定义抽象方法 4.定义接口的 实现类 5.接口的使用 接口练习 6.接口的特点 7.一个实现类可以同时实现多个接口 8.接口的继承 9.设计提示 ...

  4. Java基础语法-数据类型与idea配置

    文章目录 day02 - Java基础语法 1. 注释 使用的技巧 注意点 2. 关键字 2.1 概念 2.2 第一个关键字class 3. 字面量 区分技巧 4. 变量 4.1 什么是变量? 4.2 ...

  5. Java基本语法(初学者必看,值得收藏)

    目录 一.计算机基础 1.计算机组成 2.程序 3.编程语言 二.Java 1.Java简介 2.发展历史 3.JDK的安装和配置 4.第一个Java程序 三.Java基础 1.输出 2.代码注释 3 ...

  6. Java基础语法知识你真的都会吗?

    第一阶段 JAVA基础知识 第二章 Java基础语法知识 在我们开始讲解程序之前,命名规范是我们不得不提的一个话题,虽说命名本应该是自由的,但是仍然有一定的"潜规则",通过你对命名 ...

  7. JAVA基础语法笔记(黑马程序员系列)

    1. Java概述 1.1 Java语言发展史(了解) 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 Java语言是美国Sun公司(Stanford Uni ...

  8. java协议标准与规范

    本栏目提供了大量的 Java 技术标准与规范的简介.官方网址以及 developerWorks 网站上相关的技术资源.通过本栏目,您不但可以了解当前 Java 社区主要的技术标准和规范,还可以通过查看 ...

  9. 01.Java基础语法

    目录 01.Java基础语法 一,环境搭建 1,Java体系与特点 2,Java跨平台原理 2.1 Java虚拟机(JVM) 2.2 垃圾回收器(GC) 2.3 Java SE组成概念图 2.4 JD ...

最新文章

  1. 从硬件到软件 统一沟通将引领通讯市场
  2. QT出现“undefined reference to `vtable for’”解决方法
  3. LinkedList源码阅分析
  4. 格式化时间格式LocalDateTime转String日期
  5. 6种字符串数组的java排序 (String array sort)
  6. android连接指定的wifi
  7. 浅谈设备租赁管理系统的选型之路
  8. 应用程序的可视化图形引擎库控件Vectordraw Developer Framework
  9. SQL学习之drop语句
  10. html在线直播ppt,PPT在HTML网页上播放方法
  11. AmazeUI组件使用和百度地图集成
  12. Ubuntu无网络连接/无网络标识解决方法
  13. python宣传视频 抖音_Python生成抖音字符视频,技术流!
  14. mac系统和windows系统都有哪些不同
  15. BGP协议解析(白话版)
  16. 华为服务器进入系统怎么退出安全模式,华为手机安全模式怎么解除 华为手机安全模式解除办法...
  17. 高项、高级项目管理师论文-进度管理
  18. weather.com.cn的天气预报
  19. 基于51单片机的俄罗斯方块小游戏proteus仿真LCD12864原理图程序设计
  20. 金典Windows98虚拟机系统程序分享+适合怀旧

热门文章

  1. 项目中的用户鉴权是如何实现的?
  2. 【成为架构师课程系列】系统架构设计:非功能性目标的设计
  3. linux shift f11,然后按下CTRL+SHIFT+F11组合键
  4. 初一计算机教学论文,初中信息技术教学论文
  5. unity之跳一跳(完整版)
  6. python, echarts 实现世界地图地域流向地图
  7. 【转】实现远程开机(电脑)的各种方法总结
  8. 斗鱼直播Android开发二面被刷,赶紧收藏!
  9. 侍魂哪个服务器人最多,经典街机游戏《侍魂》里帅气的人物,你最喜欢哪个?...
  10. 各系统安装NetFrameWork3.5 安装