Java基础语法
java基础语法
Java三大版本
JDK:Java Development Kit JAVA开发者工具 JDK包含JRE
JRE:Java Runtime Environment JAVA运行时环境 JRE包含JVM
JVM:Java Virtual Machine JAVA虚拟机
卸载JDK
-
右键我的电脑-->属性-->高级系统设置-->环境变量,在系统变量中找到JAVA_HOME,双击找到目录直接删除,将该环境变量删除,再在Path中找到与JAVA相关环境变量删除。
-
打开运行,输入java -version,如显示java不是内部命令也不是外部命令则卸载成功。
或
-
删除Java的安装目录
-
删除JAVA_HOME
-
删除Path下关于Java的目录
-
在CMD中输入Java -version判断
安装JDK
-
在官网下载JDK8安装包并打开
-
设置安装目录并记住
-
配置环境变量
-
我的电脑-->右键-->属性-->高级系统设置
-
环境变量-->JAVA_HOME,新建系统变量,变量名为JAVA_HOME 变量值为JDK安装的目录
-
配置Path变量,其一指向JDK安装目录下的bin目录,其一指向JDK安装目录下jre下bin目录
-
-
打开CMD中输入java -version,若出现java安装版本则安装成功
Hello,World!
-
新建文件夹用来存放代码
-
新建一个java文件
-
文件后缀名为.java
-
Hello.java
-
-
编写代码
public class Hello{ public static void main(String[] args){ System.out.print("Hello,World!"); } }
-
编译 javac java文件,生成一个class文件,输入javac xx.java命令
-
运行class文件,java class文件,输入java xx命令
可能遇到的问题
-
每个单词的大小写固定,不能混淆,Java是大小写敏感的
-
尽量使用英文
-
文件名要与类名必须保证一致
-
符号不能用中文符号
JAVA程序运行机制
-
编译型
-
解释型
JAVA既有编译型特点,也有解释型特点
创建项目
创建空项目-->文件-->新建模块-->文件-->项目结构-->在项目SDK栏选中自己的版本,选择合适的项目语言等级
注释
注释不会被执行,是给人看的
-
单行注释
public class HelloWorld { public static void main(String[] args) { //单行注释 //输出一个Hello World System.out.println("Hello,World!"); } } //之后开始为注释
-
多行注释
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello,World!"); //多行注释 /* 此为多行注释 此为多行注释 此为多行注释 */ } } /**/在两星号中间为多行注释
-
文档注释
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello,World!"); //javaDoc:文档注释 /** */ } } /***/在第二个星号之后为文档注释

标识符
关键字
Java所有的组成部分都需要名字。类名、变量名以及方法名都将被视为标识符
注意点
-
所有标识符应该以字母(A-Z或者a-z),美元符($)或者下划线(_)开始
-
首字母之后可以是任意字母(A-Z或者a-z),美元符($)下划线(_)或数字的任意组合
-
不能用关键字作为变量名或方法名
-
标识符是大小写敏感的,即大小写意义不同
-
合法标识符举例:agb、$swd、_iske、__1_wkle
-
非法标识符举例:143、-sjdk、#mji
数据类型
强类型语言
-
要求变量的使用严格符合规定,所有变量都必须先定义才能使用
弱类型语言
-
基本类型
-
引用类型

-
在未声明初始值时,int类型默认为0,String类型默认为null
-
在使用long时数字后面要加L,用以区分
-
int最常用
-
在使用float时数字后面要加F
-
八大基本类型以外均为引用类型
public class learn { public static void main(String[] args) { //八大数据类型 //整数 int num1 = 10;//最常用 byte num2 = 20; short num3 = 30; long num4 = 30L;//Long类型要在数字后面加L //小数:浮点数 float num5 = 50.1F;//float类型要在数字后面加F double num6 = 3.1415926; //字符 char name1 = 'A'; //字符串,string不是关键字,是种类 // string name2 = "xx"; //布尔值:只能输出tyre或false boolean flag = ture; //boolean flag = false; } }
字节
-
位(bit):是计算机内部数据储存的最小单位,11001100时八位二进制数
-
字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示
-
1B(byte,字节)=8bit(位)
-
字符:是指计算机中使用的字母、数字、字、和符号
-
1bit表示一位
-
1Byte表示一个字节,1B=8b。
-
1024B=1kb
-
1024kb=1M
-
1024M=1G
数据类型扩展
进制
二进制有0b前缀
十进制
八进制有0前缀
十六进制有0x前缀
public class learn2 { public static void main(String[] args) { //进制扩展 进制 二进制0b 十进制 八进制0 十六进制0x int i = 10; int i2 = 0b10;//二进制 int i3 = 010;//八进制 int i4 = 0x10;//十六进制 0~9 A~F System.out.println(i); System.out.println(i2); System.out.println(i3); System.out.println(i4); System.out.println("===================="); //浮点数拓展 银行业务怎么表示?通过BigDecimal 数学工具类 //float 浮点数数据类型是有限的,离散的,有舍入误差的,是大约的,是接近但不等于的 //double //最好不要使用浮点数进行比较 float f = 0.1F; double d = 0.1; System.out.println(f==d);//false float d1 = 283746453738273f; float d2 = d1+ 1; System.out.println(d1==d2);//ture //字符拓展 char c1 = 'a'; char c2 = '中'; System.out.println(c1); System.out.println((int)c1);//强制转换 System.out.println(c2); System.out.println((int)c2);//强制转换 //所有的字符串本质还是数字 //char编码问题 Unicode编码 2字节 65536 Excel 2*16=65536 //转义字符 //U0000 UFFFF char c3 = '\u0061'; System.out.println(c3);//a //\t 制表符 //\n 换行符 //... System.out.println("Hello\tWord"); //================================================================== String sa = new String( original:"Hello World"); String sb = new String( original:"Hello World"); System.out.println(sa==sb);//false String sc = "Hello World"; String sd = "Hello World"; System.out.println(sc==sd);//ture //对象 从内存分析 //布尔值扩展 boolean flag = ture; if (flag==ture){}//新手 ==ture可省略 if (flag){}//老手 //less is more!代码要精简易读 } }
不要使用浮点数进行比较
类型转换
运算中,不同类型的数据要先转换成同一类型,然后进行运算。
数据类型由低到高
低----->----->----->---------->--------->---------高
byte, short, char - > int - > long - > float - > double
-
强制转换
(类型)变量名 可将括号后变量类型强制转换为括号内类型,例(byte)i.
-
自动转换
类型由高到低需要强制转换,由低到高可自动转换
public class learn3 { public static void main(String[] args) { int i = 128; byte b = (byte)i;//内存溢出 //强制转换 (类型)变量名 可将括号后变量类型强制转换为括号内类型 System.out.println(i); System.out.println(b); byte x = 111; int y = x; System.out.println(y);//已执行自动转换 /* 注意点 1.不能对布尔值进行转换 2.不能把对象类型转换为不相干的类型 3.在把高容量转换到低容量的时候,强制转换 4.转换的时候可能内存溢出,或者精度问题 */ System.out.println((int)23.7); //23 System.out.println((int)-24.89f); //24 char c = 'a'; int d =c+1; System.out.println(d); System.out.println((char)d); //操作比较大的数的时候,注意溢出问题 //JDK新特性,数字之间可以用下划线分割 int money =100000_0000; System.out.println(money); int years =20; int total = money*years; long total2 =money*years;//默认为int,在转换之前已经溢出 System.out.println(total);//-1474836480,计算的时候溢出了 System.out.println(total2);//-1474836480 long total3 = money*(long)years;//在计算前已经执行类型转换 System.out.println(total3);//成功输出 } }
注意点 1.不能对布尔值进行转换 2.不能把对象类型转换为不相干的类型 3.在把高容量转换到低容量的时候,强制转换 4.转换的时候可能内存溢出,或者精度问题
变量常量和变量命名规范
变量
变量是什么:可以变换的量
java是一种强类型语言,每个变量都必须声明其类型。
java变量是程序中最基本的储存单元,其要素包括变量名,变量类型和作用域
type verName [=value] [{,varname[=value]}];
//数据类型 变量名 = 值;可以使用逗号隔开来声明多个同类型变量,但不建议。
注意事项
-
每个变量都必须由类型,类型可以是基本类型,也可以是引用类型。
-
变量名必须是合法的标识符。
-
变量声明是一条完整的语法,因此每一个声明必须以分号结束。
-
变量作用域
-
类变量:是从属于类的
-
实例变量:在方法外,类内
-
局部变量:在方法中间,必须声明和初始化值
public class Learn2 { //类变量 static static double salary = 2500; //属性:变量 //实例变量:从属于对象;如果不进行初始化,这个类型的默认值为 0或者0.0 //布尔值默认为false //除了基本类型其余默认值都是null String name; int age; //main方法 public static void main(String[] args) { //局部变量 int i =10; System.out.println(i); //变量类型 变量名字 Learn2 learn2 = new Learn2(); System.out.println(learn2.age); System.out.println(learn2.name); //类变量 static System.out.println(salary); } //其他方法 public void add(){ } }
常量(静态变量)
常量可以理解为一种特殊的变量,它的值被设定后,在程序运行过程中不允许改变。
可以通过final定义
final 常量名=值;
final double PI=3.14;
常量名一般使用大写字符
public class Learn { //修饰符,不存在先后顺序,变量名前都是修饰符 static final double PI=3.14; public static void main(String[] args) { System.out.println(PI);//3。14 } }
变量的命名规则
-
所有的变量、方法、类名、见名知意;
-
所有成员变量:首字母小写和驼峰原则:monthSalary,除了第一个单词以外,后面的单词首字母大写 :lastName
-
局部变量:首字母小写和驼峰原则
-
常量:大写字母和下划线:MAX_VALUE
-
类名:首字母大写和驼峰原则:Man,GoodMan
-
方法名:首字母小写和驼峰原则:run(),runRun()
运算符
-
算术运算符:+,-,*,/,%,++,-- %为取余运算(模运算)
-
赋值运算符:=
-
关系运算符:>,<,>=,<=,==,!=instanceof ==为是否等于,!=instanceof为不等于
-
逻辑运算符:&&,||,! 即与或非
-
位运算符:&,|,^,~,>>,<<,>>>
-
条件运算符:? :
-
扩展赋值运算符:+=,-=,*=,/=
如果运算中有long类型,则结果为long类型,否则结果都为int类型,如果有double类型,则结果一定是double类型
package Learngo; public class Learn04 { public static void main(String[] args) { long a =172635462; int b = 123; short c =10; byte d = 8; System.out.println(a+b+c+d);//long 如果运算中有long类型,则结果为long类型,否则结果都为int类型,如果有double类型,则结果一定是double类型 System.out.println(b+c+d);//int System.out.println(c+d);//int } }
运算举例
package Learngo; public class Learn03 { public static void main(String[] args) { //把只有两个数相加运算符的叫做二元运算符 //Ctrl+D 快捷键 复制当前行到下一行 int a = 10; int b = 20; int c = 25; int d = 25; System.out.println(a+b); System.out.println(a-b); System.out.println(a*b); System.out.println((double)a/b); } }
关系运算符举例
package Learngo; public class Learn05 { public static void main(String[] args) { //关系运算符的返回结果:正确,错误 即布尔值 int a = 10; int b = 20; int c =21; //取余,模运算 System.out.println(c%a);// c/a 21/10=2余1 System.out.println(a>b); System.out.println(a<b); System.out.println(a==b); System.out.println(a!=b); } }
幂运算需要使用Math,2^3,二的三次方,java中无此表达方式,要使用幂运算。
很多运算会使用工具类计算。
关于++运算符和--运算符
-
++运算符:a=3,b=a++,将输出a=4,b=3,加号在后为先赋值再计算;a=3,b=++a,将输出a=4,b=4,加号在前为先计算再赋值。--运算符同理。
package Learngo; public class Learn06 { public static void main(String[] args) { //++ -- 自增 自减 一元运算符:只需要一个数就可运算 int a = 3; // a++ a = a + 1 int b = a++;//执行完这段代码后,先给b赋值,再自增 // a = a + 1 System.out.println(a); int c = ++a;//执行完这段代码后,先自增1,再给c赋值 // ++a a = a + 1 System.out.println(a); System.out.println(b); System.out.println(c); } }
逻辑符运算
短路运算
在执行逻辑运算时,当前面的运算已经为错时,后面的运算不再进行。
package Learngo; //逻辑运算符 public class Learn08 { public static void main(String[] args) { //与 或 非 boolean a = true; boolean b = false; System.out.println("a && b:"+(a && b));//逻辑与运算,两个都为真,结果才为真 System.out.println("a || b:"+(a || b));//逻辑或运算,两个中有一个为真,结果就为真 System.out.println("! (a&&b):"+(! (a&&b)));//逻辑非运算,如果为真则为假,如果为假则为真 //短路运算 int c = 5; boolean d = (c<4)&&(c++<4); System.out.println(d); System.out.println(c); } }
位运算符(包括左右移运算符)
在二进制中使用
package Learngo; public class Learn09 { public static void main(String[] args) { //位运算符 效率高!!! /* 二进制 A = 0011 1100 B = 0000 1101 A&B(与) = 0000 1100 如果两个都是1,则为1;有一个是0,则为0。 A/B(或) = 0011 1101 如果两个都是0,则为0;有一个是1,则为1。 A^B(亦或) = 0011 0001 如果两位置相同则为0;不相同则为1; ~B(非) = 1111 0010 取反 2*8=?,2*2*2*2 <<(左移) *2(乘2) (左移运算符) >>(右移) /2(除以2) (右移运算符) 0000 0000 0 0000 0001 1 0000 0010 2 0000 0011 3 0000 0100 4 0000 1000 8 0001 0000 16 */ System.out.println(2<<3); } }
扩展运算符
package Learngo; //三元运算符 public class Learn11 { public static void main(String[] args) { //x?y:z //如果x==true,则结果为y,否则结果为z int a = 80; String type = a<60?"不及格":"及格"; //if System.out.println(type); } }
优先级
可以使用括号标定优先级
一元运算符>+-*/等>其他
| 优先级 | 运算符 | 结合性 |
|---|---|---|
| 1 | ()、[]、{} | 从左向右 |
| 2 | !、+、-、~、++、-- | 从右向左 |
| 3 | *、/、% | 从左向右 |
| 4 | +、- | 从左向右 |
| 5 | <<、>>、>>> | 从左向右 |
| 6 | <、<=、>、>=、instanceof | 从左向右 |
| 7 | ==、!= | 从左向右 |
| 8 | & | 从左向右 |
| 9 | ^ | 从左向右 |
| 10 | | | 从左向右 |
| 11 | && | 从左向右 |
| 12 | || | 从左向右 |
| 13 | ?: | 从右向左 |
| 14 | =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= | 从右向左 |
详细版
| 序列号 | 符号 | 名称 | 结合性(与操作数) | 目数 | 说明 |
|---|---|---|---|---|---|
| 1 | . | 点 | 从左到右 | 双目 | |
| ( ) | 圆括号 | 从左到右 | |||
| [ ] | 方括号 | 从左到右 | |||
| 2 | + | 正号 | 从右到左 | 单目 | |
| - | 负号 | 从右到左 | 单目 | ||
| ++ | 自增 | 从右到左 | 单目 | 前缀增,后缀增 | |
| - - | 自减 | 从右到左 | 前缀减,后缀减 | ||
| ~ | 按位非/取补运算 | 从右到左 | 单目 | ||
| ! | 逻辑非 | 从右到左 | 单目 | “!”不可以与“=”联用 | |
| 3 | * | 乘 | 从左到右 | 双目 | |
| / | 除 | 从左到右 | 双目 | 整数除法:取商的整数部分,小数部分去掉,不四舍五入 | |
| % | 取余 | 从左到右 | 双目 | ||
| 4 | + | 加 | 从左到右 | 双目 | |
| - | 减 | 从左到右 | 双目 | ||
| 5 | << | 左移位运算符 | 从左到右 | 双目 | |
| >> | 带符号右移位运算符 | 从左到右 | 双目 | ||
| >>> | 无符号右移 | 从左到右 | 双目 | ||
| 6 | < | 小于 | 从左到右 | 双目 | 关系运算符“大于”说明 |
| <= | 小于或等于 | 从左到右 | 双目 | ||
| > | 大于 | 从左到右 | 双目 | ||
| >= | 大于或等于 | 从左到右 | 双目 | ||
| instanceof | 确定某对象是否属于指定的类 | 从左到右 | 双目 | ||
| 7 | == | 等于 | 从左到右 | 双目 | 关系运算符“==”说明 |
| != | 不等于 | 从左到右 | 双目 | ||
| 8 | & | 按位与 | 从左到右 | 双目 | |
| 9 | | | 按位或 | 从左到右 | 双目 | |
| 10 | ^ | 按位异或 | 从左到右 | 双目 | |
| 11 | && | 短路与 | 从左到右 | 双目 | |
| 12 | || | 短路或 | 从左到右 | 双目 | |
| 13 | ? : | 条件运算符 | 从右到左 | 三目 | |
| 14 | = | 赋值运算符 | 从右到左 | 双目 | |
| += | 混合赋值运算符 | ||||
| -= | |||||
| *= | |||||
| /= | |||||
| %= | |||||
| &= | |||||
| |= | |||||
| ^= | |||||
| <<= | |||||
| >>= | |||||
| >>>= |
包机制
包的本质就是文件夹
一般利用公司域名倒置作为包名;www.baidu.com com.baidu.www
定义包使用packge语句 packge xxx;
packge 必须放在最上面
packge 包名;
packge定义包,import导入包
导入包使用import语句
import 包名.类名;可以导入包下某个类
import 包名.*;可以导入包下所有类
JavaDoc
JavaDoc命令是用来生成自己API文档的
-
@author 作者名
-
@version 版本名
-
@since 指明需要最早使用的jdk版本
-
@param 参数名
-
@return 返回值情况
-
@throws 异常抛出情况
加在类上面就是类的注释,加在方法上面就是方法的注释
javadoc命令
javadoc -encoding UTF-8 -charset UTF-8
-encoding UTF-8 -charset UTF-8是为了使中文可以输出
转义符
\t,表示空格:System.out.print("\t");
\n,表示回车:System.out.print("\n"); 换行还可以用System.out.println();
| 转义字符 | 意义 | ASCII码值(十进制) |
|---|---|---|
| \a | 响铃(BEL) | 007 |
| \b | 退格(BS) ,将当前位置移到前一列 | 008 |
| \f | 换页(FF),将当前位置移到下页开头 | 012 |
| \n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
| \r | 回车(CR) ,将当前位置移到本行开头 | 013 |
| \t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
| \v | 垂直制表(VT) | 011 |
| \ | 代表一个反斜线字符''' | 092 |
| ' | 代表一个单引号(撇号)字符 | 039 |
| " | 代表一个双引号字符 | 034 |
| \? | 代表一个问号 | 063 |
| \0 | 空字符(NUL) | 000 |
| \ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
| \xhh | 十六进制所代表的任意字符 | 十六进制 |

浙公网安备 33010602011771号