Java基础语法
1.1 原码,反码,补码,二进制
原码,反码,补码
正数的反码补码都是原码。
计算机是以补码的形式存储二进制数的,因为要保证例如(+1)+(-1)的情况要等于0以及0000 0000和1000 0000表示的都是0。
原码:指原来本身的数;
反码(仅负数):符号位不变,其余数0变1,1变0;
补码(仅负数):反码+1。
十进制转二进制

为避免各类进制的混淆,每种进制在计算机中会加前缀以此区分
- 二进制:0b前缀,如0b1010是十进制的10
- 八进制:0前缀,如012是十进制的10
- 十进制:无前缀
- 十六进制:0x前缀,如0xA是十进制的10,其中x是英文字母而非乘号
1.2 Markdown学习
标题大小
格式:n个# + 标题文本
字体
Hello,world!
Hello,world!
Hello,world!
Hello,world!
引用
应用样式语法:输入>空格 ,再输入文本内容
分割线
格式:三个-或者三个*
图片
插入图片格式:! [图片名称] ()
网络图片:需输入图片的地址下图地址:https://pic1.zhimg.com/70/v2-8eb7f796cf61db277b986fc4da30a18c.jpg

超链接
列表
有序列表
格式:输入1.空格,然后输入文本内容,回车会自动生成有序列表
- A
- B
- C
无序列表
格式:输入-空格,然后输入文本内容,回车会自动生成无序列表
- A
- B
- C
代码
大段代码引用格式:三个`加上语言
public class Hello{
public static void main(String[] args){
System.out.print("Hello,world!");
}
}
文本穿插代码格式:两个`中间输入代码内容
今天我们来学习第一个程序:public class Hello
1.3 Java学习路线
JDK 、JRE 、JVM之间的关系

1.4 安装与卸载jdk
安装jdk
-
百度搜索JDK8,找到下载地址,版本号:jdk-8u181
-
同意协议
-
下载电脑对应版本
-
记住安装路径
-
配置环境变量
-
右键我的电脑点击属性
-
搜索高级系统设置
-
点击环境变量
![image]()
-
新建系统变量安装图示填写
![image]()
-
双击系统变量中的path,配置path变量,如图所示
![image]()
-
-
cmd中输入java -version确认是否安装成功
卸载jdk
- 删除java的安装目录
- 删除JAVA_HOME
- 删除path下关于java的目录
- java -version确认是否卸载成功
1.5 Hello,world!
-
在代码所在路径前加上cmd和空格再按回车即可转到cmd界面
![image]()
-
输入javac Hello.java编译代码文件,文件夹会生成一个class文件
-
输入java Hello运行class文件得出输出结果Hello,world!
1.6 在IDEA创建一个项目
视频链接:https://www.bilibili.com/video/BV12J41137hu?p=21&spm_id_from=pageDriver【狂神说Java】Java零基础学习视频通俗易懂 P21 java基础01:注释
1.7 IDEA 快捷键
-
psvm:public static void main(String[] args){}
-
sout:System.out.print();
-
删除一整行:Ctrl+Y
-
复制当前行到下一行:Ctrl+D
-
整理代码格式:Ctrl+alt+L
-
添加代码块:Ctrl+alt+t
-
多行注释:/*加回车
-
JavaDoc文档注释:/**加回车
- 行注释Ctrl+/
首先你的光标要处于这一行,处于这行的哪个位置都可以,按Ctrl+/,就可以往行首添加"//",将该行注释掉。再次按Ctrl+/,可以去掉该行注释。

- 块注释Ctrl+Shift+/
使用块注释需要先选中要注释的块。

按Ctrl+Shift+/注释掉该块代码
- 代码块生成快捷键:选中要包裹代码块的代码,ctrl+alt+t
1.8 数据类型

public class demo1 {
public static void main(String[] args) {
byte num1 = 1;
int num2 = 200;
short num3 = 29;
long num4 = 30L;//long类型要在数字后加L
float num5 = 20.1F;//float类型要在数字后加F
double num6 = 3.1415926;
char character = 'A';
String name = "Ayisprite";//String 不是关键字,而是一个类
boolean flag = true;
}
}
最好完全使用浮点数进行比较,案例如下
float a = 0.1f;//0.1
double b = 1.0/10;//0.1
System.out.println(a==b);//输出ab是否相等,结果输出false
float c = 12111222f;
float d = c + 1;
System.out.println(c==d);//输出ab是否相等,结果输出true
所以在使用大数额的小数时,使用数学工具类BigDecimal
1.9 类型转换

强制类型转换(转换由高-->低)
public class demo1 {
public static void main(String[] args) {
int i = 128;
byte b = (byte) i;//强制类型转换格式:(类型)变量名
System.out.println(i);//输出128
System.out.println(b);//输出-128,因为byte最大容纳127,128会造成溢出
}
}
自动类型转换(转换由低-->高)
public class demo1 {
public static void main(String[] args) {
int i = 128;
double d = i;//由低容量到高容量不用强制转换,此时可自动转换
System.out.println(i);//输出128
System.out.println(d);//输出128.0
}
}
强制转换可能会出现精度问题
public class demo1 {
public static void main(String[] args) {
System.out.println((int)23.48);//输出为23
System.out.println((int)45.89f);//输出为45
}
}
- 注意点
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 在将高容量类型转换成低容量类型时,需要强制转换,反之不用管,直接赋值即可
- 强转换可能会出现内存溢出,或精度问题
int强转成char
public class demo1 {
public static void main(String[] args) {
char c = 'a';
int d = c + 1;
System.out.println(d);//输出98
System.out.println((char) d);//输出b
}
}
要注意转换中存在的溢出问题
public class demo1 {
public static void main(String[] args) {
int money = 10_0000_0000; //jdk7新特性,数字之间可以用下划线分割
System.out.println(money);//输出1000000000,并不会输出下划线
int years = 20;
int total = money*years;//此时total是-1474836480,超出了int的容量
long total2 = money*years;//此时total2是-1474836480,因为转换前就已经默认money*years是int
long total3 = money*((long)years);//先把其中一个数转换为long
System.out.println(total3);//此时输出20000000000,得到正确结果
}
}
1.10 变量作用域和常量
变量
- 类变量:加static的变量,不需要new一个对象再调用,可以直接调用
- 实例变量:不加static的变量,调用时要先new一个对象再用对象调用
- 局部变量:超出作用范围就无效的变量
- 【小结】加不加static的区别在于:加static可以直接用
类名.变量(或者加了static的方法),不加static必须new一个对象再对象名.变量(或者没加static的方法)
静态变量和实例变量的区别:
-
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
-
在程序运行时的区别:
-
实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。
-
静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。
-
总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
-
public class Demo02 {
static double salary = 2500;//类变量,要加前缀static,从属于类,在使用时不用demo02.salary,可以直接salary
int age = 24;//在类里方法外申明的变量叫实例变量,从属于对象,如果不自行初始化就会是默认值
String name;//boolean默认是false,除了基本类型,其余的默认值都是null
public static void main(String[] args) {
int i = 10;//局部变量,必须声明和初始化值,只在方法里有效
Demo02 demo02 = new Demo02();
System.out.println(demo02.age);//因为没有对实例变量age进行初始化,所以输出的是int的默认值0
System.out.println(demo02.name);//因为没有对实例变量name进行初始化,所以输出的是String的默认值null
System.out.println(salary);//使用时直接salary,不用demo02.salary
}
//类里有一个main方法和其他可创建的新方法
public void add(){
}
}
常量
static final double PI = 3.14;
//final和static修饰符顺序可以颠倒,定义常量用final关键字,常量名一般大写,用static修饰是确保能直接用PI来使用
变量的命名规范
- 所有变量、方法、类名:见名知意
- 类变量:首字母小写和驼峰原则:除第一个单词以外,后面的单词首字母大学,例:student,studentName
- 局部变量:首字母小写和驼峰原则:跟类变量一样
- 常量:大写字母和下划线:例:PI,MAX_VALUE
- 类名:首字母大写和驼峰原则:例:Student,StudentName
- 方法名:首字母小写和驼峰原则:例:student(),studentName()
1.11 运算符
java支持如下运算符
- 算数运算符:+,-,*,/,%,++,--
- 赋值运算符:=
- 关系运算符:>,<,>=,<=,==,!=,instanceof
- 逻辑运算符:&&,||,!
- 位运算符:&,|,^,~,>>,<<,>>>
- 条件运算符:?:
- 扩展赋值运算符:+=,-=,*=,/=
各种数据类型的运算造成的结果类型不同
long a = 12312331343442L;
int b = 123;
short c = 10;
byte d = 8;
System.out.println(a+b+c+d);//Long,如果多个数进行运算,只要含long那结果就是long型
System.out.println(b+c+d);//Int,没有long,统一结果都是int型
System.out.println(c+d);//Int,没有long,统一结果都是int型,即使参与运算的没有int型
数学工具类
double pow = Math.pow(2,3);//调用数学工具类来进行幂运算,很多运算会使用一些工具类来操作
逻辑运算符 &&,||,!
package operator;
public class Demo02 {
public static void main(String[] args) {
//逻辑运算符:与(&&)或(||)非(!)
boolean a = false;
boolean b = true;
//输出括号里可以用(“输出文本”+变量)的形式来连接两个部分共同输出
System.out.println("a&&b:"+(a&&b));//false
System.out.println("a||b:"+(a||b));//true
System.out.println("!(a&&b):"+!(a&&b));//true
//在进行a&&b时,若检测到a是false会直接跳过b值的验算,因为与运算只要有false结果就是false,可以用短路运算证明
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println(d);//输出一定是false
System.out.println(c);//若输出为6则进行了c的自增操作,若输出为5则没有自增操作,输出结果为5,所以证明成功
}
}
位运算(跟二进制有关的运算)&,|,^,~,>>,<<,>>>
- &:与,只有两个1才会得出1,其余结果全是0
- |:或,只有两个0才会得出0,其余结果全是1;也可以这样解释:有一个1就是1,没1就是0
- ^:取反,也可以叫异或,相同得0,不同得1
- ~:非,1变0,0变1
A=0011 1100
B=0000 1101
则:
A&B=0000 1100
A|B=0011 1101
A^B=0011 0001
~B=1111 0010
- <<相当于*2,在二进制里相当于让1左移一位,>>相当于/2,在二进制里相当于让1右移一位
- 这两个运算符运行效率极高
DEC:1 BIN:0000 0001
DEC:2 BIN:0000 0010
DEC:4 BIN:0000 0100
DEC:8 BIN:0000 1000
DEC:16 BIN:0001 0000
DEC:32 BIN:0010 0010
扩展赋值运算符
int a = 10;
int b = 20;
a+=b;//a=a+b
a-=b;//a=a-b
字符串连接符+
int a = 10;
int b = 20;
//输出括号里出现字符串会把所有内容转换成String型
System.out.println(a+b);//输出为30
System.out.println(""+a+b);//输出为1020
System.out.println(a+b+"");//输出为30,字符串在最后面的时候,会先进行运算操作
三元运算符
x ? y : z
如果x==true,则结果为y,否则为z
int age = 23;
String result = age>18 ? "成年" : "未成年";
System.out.println(result);//输出成年
1.12 包机制
为了更好地组织类,java提供了包机制,用于区别类名的命名空间
-
一般使用公司域名倒置最为包名
-
包语句的语法格式为:
package pkg1[.pkg2[.pkg3....]];例如:
package com.liam.base
为了能够使用某一个包的成员,我们需要在java程序中导入该包,使用import关键字可完成此功能
-
import语法格式为:
import pkg1[.pkg2....].(classname|*);可以用import导入到某个包的具体一类,也可以用*来导入所有类
例如:
import com.liam.base
import com.liam.base.Demo01
import com.liam.base.* -
package应在代码最上边,import不能在package上面
1.13 JavaDoc
参数信息
- @author 作者名
- @version 版本号
- @since 指明需要最早使用的jdk版本
- @param 参数名
- @return 返回值情况
- @throws 异常抛出情况
package com.liam.base;
/**
* @author Liam
* @version 1.0
* @since 1.8
*/
public class Doc {
String name;
/**
* @author Liam
* @param name
* @return
* @throws Exception
*/
public String test(String name)throws Exception{
return name;
}
}
用命令行生成JavaDoc
首先在cmd中进入目标文件所在路径,再以“javadoc 参数 文件名.java”的格式输入命令即可

javadoc -encoding UTF-8 -charset UTF-8 Doc.java
【注】高亮部分是为了让文件更有可读性,总体的格式还是javadoc 参数 文件名.java





浙公网安备 33010602011771号