在开始学习Java基础语法之前,为了方便后续的学习及代码的管理,创建一个新的项目(空项目/新文件夹)十分有必要
由于在上文中,已经创建了一个Project项目。因而打开IDEA,不会让我们重新再创建一个项目,而是直接打开上次创建好的项目里,因此我们要关闭当前的项目,回到原始开始界面中创建一个空项目。点击【File】 — 【Close Project】便可以关闭当前项目了
在【Project name】给空项目命名为“JavaSE”,在【Project location】选择项目安放的位置,创建空项目的实质其实就是创建一个新的文件夹存放代码的地方
进入到JavaSE项目之后,需要重新创建一个Module,并且配置Java环境,点击【File】—【New】— 【Module】
在【Module】模块中,选择创建Java,Module SDK会自动配置好当前的Java版本,直接点击【Next】,进入下一步
给新的Module模块命名和选择Module模块的文件路径,其本质就是在JavaSE文件夹中创建新的二级文件夹,本人给Module模块命名为“基础语法”,点击右下角的【Finish】便完成了New Module的创建
接下来,就是开始给基础语法Module模块配置好Java环境了,若是没有设置好,在该Module下是无法运行.java文件的。点击【File】— 【Project Structure】去设置好Java环境
打开【Project Structure】,左边目录选择【Project Settings】— 【Project】。如下图所示,一开始Project SDK会出现爆红的现象,显示无法找到当前电脑的Java版本,因此我们需要手动去选择好“1.8 version 1.8.0_231”的Java版本
在【Project language level】Java语言版本中,我们选择8,因为该版本的语法比较稳定,适合初学者的学习。最后点击右下角的【Apply】就完成了。到这里,创建一个属于自己的项目以及给空项目配置好Java环境都已经设置完毕。接下来就可以开始我们的学习之旅啦
代码注释:
代码注释的输入语法具体如下表所示:
注释类型 | 输入语法 |
---|---|
单行注释 | // ... 后面输入的内容就是单行注释文本 |
多行注释 | /* ... */ 中间输入的内容就是多行注释文本 |
文档注释 | /** ... */ 中间输入的内容就是文档注释文本 |
此外,还可以对注释的文本进行个性化设置,具体在【File】— 【Settings】中,找到编辑器【Editor】下级的【Code Scheme】(代码格式)选择【Java】,右边目录中就可以对代码各种语法进行个性化的设置
其中,Comments就是表示注释,其中Comments下面就有三种类型,分别为Block comment*#单行注释#、JavaDoc#文档注释#、 Line comment,点击想要修改的注释类型,在最右边便可以进行更改颜色、大小、粗斜体等等
关键词:随着学习的深入,接触到关键词会越来越多,并且能读懂它背后的含义。现阶段接触到的关键词就有:class 、public、 void、static
Java所有的组成部分都需要名字。比如类名、变量名以及方法名都被称为标识符
标识符注意事项:
所有标识符都应该以字母(A-Z或者a-z)、美元符号($)、或者下划线(_)开始
首字符之后可以是字母(A-Z或者a-z)、美元符号($)、下划线(_)或者数字的任何字符组成
不能使用关键字作为变量名或方法名
标识符是大小写敏感的
合法标识符举例有:age、$salary、_value、 _1_value
非法标识符举例有:123abc、-salary、#abc
可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音,不太符合规范
public class keyword {
public static void main(String[] args){
String 王者荣耀 = "最强王者";
System.out.print(王者荣耀);
}
}
***强类型语言:***(安全性高,但速度较慢)
要求变量的使用要严格符合规定,所有变量多必须先定义后才能使用
弱类型语言:
要求变量的使用符合规定
Java的数据类型分为两大类
基本类型
Java实例代码如下所示:
public class datatype{
public static void main(String[] args){
//八大基本数据类型
//整数类型
int num1 = 10;
byte num2 = 20;
short num3 = 30;
long num4 = 40L; // Long类型要在数字后面加个L,注意书写规范
//小数类型(浮点数类型)
float num5 = 50.1F; //float类型要在数字后面加个F
double num6 = 3.1415926;
//字符类型,只有2个字节 = 一个中文汉字
char name = '我';
//字符串类型,String不是关键词,而是一个类
//String parh = "我是大帅哥";
//布尔值:是非
boolean flag = true;
boolean flag = false;
}
}
引用数据类型
位(bit):是计算机内部数据储存的最小单位,11001100是一个八位二进制数
字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示
1B(byte,字节) = 8bit(位)
字符:是指计算中使用的字母、数字、字和符号
1bit表示1位
1Byte表示一个字节,1B = 8bit
1024B = 1KB
1024KB = 1M
1024M = 1G
关于整数类型与浮点数类型进行了相关的扩展,代码如下所示:
public class datatype{
public static void main(String[] args){
//整数扩展:二进制0b、八进制0、十进制、十六进制0x
int x1 = 10;
int x2 = 010; //输出8
int x3 = 0x10; //输出16
System.out.println(x1);
System.out.println(x2);
System.out.println(x3);
//================================= 分割线
//浮点数扩展:银行业务数字如何表示?
//float 描述为:有限的、离散的、接近但不等于、舍入误差
//最好完全避免使用浮点数进行比较!
//BigDecimal 数学工具类可以进行数值的比较,后续了解
float y1 = 0.1f;
float y2 = 1.0/10;
System.out.println(y1==y2);//'=='表示两个变量是否相等的判断语句,输出为false
System.out.println(y1);
System.out.println(y2);
float y3 = 13141516f;
float y4 = y3 + 1;
System.out.println(y3==y4);//输出为true
//================================= 分割线
//字符串扩展
char c1 = 'a';
char c2 = '我';
System.out.println(c1);
System.out.println(c2);
//字符强制转换为数值,所有字符的本质都是数字
System.out.println((int)c1);
System.out.println((int)c2);
//字符本质涉及到编码Unicode,表示范围为:U0000~UFFFF
char c3 = '\u0061';
System.out.println(c3);//输出为a
//转义字符
// \t 制表符; \n 换行;
System.out.println("Hello,\n World!");
//布尔值扩展
boolean flag = true;
//以下两行代码都是一样的
if (flag==true){
}; //新手小白的编写习惯
if (flag){
}; //大佬的编写习惯
}
}
// 低 ----------------> 高
byte,short,char -> int -> long -> float -> double
类型转换的方式:
"类型转换"实例代码如下所示:
public class datatypechange{
public static void main(String[] args){
int i1 = 128;
//强制转换:从高到低的类型转换时,输入语法为(类型名)变量名
byte b = (byte)i1; //会出现内存溢出的情况,输出结果为-128
System.out.println(i1);//128
System.out.println(b);//-128
//自动转化:当低到高的类型转换时,不需要加任何东西
int i2 = 128;
double d = a;
System.out.println(i2);//128
System.out.println(d);//128.0
/*注意点:
1. 不能对布尔值进行转换
2. 不能把对象类型转换为不相干的类型
3. 在把高容量转化为低容量的时候,强制类型转换可能存在内存溢出与精度问题
*/
System.out.println((int)23.7);//输出结果为23
System.out.println((int)-45.89f);//输出结果为-45
//字符转换
char c = 'a';
int i3 = c + 1;
System.out.println(i3);//输出结果为98
System.out.println((char)i3); //输出结果为b
//操作比较大数值的时候,注意内存溢出问题
//JDK7新特性:数字之间可以用下划线进行分割
int money = 1000000000;
int money2 = 10_0000_0000;
int years = 20;
int total1 = money2 * years;//输出结果为-1474836480,计算的时候溢出了
System.out.println(total1);
long total2 = money2 * years;//计算出的结果已经是int类型,再转换为long类型已经为时已晚
System.out.println(total2);
//如何解决?
long total3 = money2 * ((long)years);//先把一个数转换为long类型
System.out.println(total3);
}
}
变量:
如何定义变量:
type verName [=value] [{
,verName[=value]}];
//数据类型 变量名 = 值;可以使用逗号隔开来表明多个同类型变量(但是不推荐这样写)
注意事项:
“变量定义”代码讲解实例:
public class Demo{
public static void main(String[], args){
// 定义变量
int a,b,c; //不可读性,不推荐这样做
int a = 1, b = 2, c = 3; //不推荐
String name ="Szx"; //引用类型
char x = 'X';
double pi = 3.14;
}
}
变量作用域:
"变量作用域——类变量/实例变量/局部变量"代码实例:
public class Variable{
static int allClicks = 0; //类变量
String str = "hello world"; //实例变量
public void method(){
int i = 0; //局部变量
}
}
“变量作用域”代码讲解:
public class Demo{
// 作用域
//属性:理解为变量
//类变量
static double salary = 2500;
/*实例变量:
从属于对象:从属于Demo类;
如果不进行初始化,这个数值类型的默认值为0或0.0,字符为null
布尔值默认为false,除了基本基本类型,其余默认值都是null*/
String name;
int age;
//main方法
public static void main(String[], args){
//局部变量:生命周期在main方法里面,出去即死亡;必须声明和初始化值
int i;
System.out.println(i); //i没有赋值,无法运行
//实例变量要在main方法里头进行应用,需要输入new Demo
//变量类型 变量名字 = new Demo();
Demo demo = new Demo();
System.out.println(demo.age);
//类变量 static
System.out.println(salary); //可直接运行
}
//其他方法
public void add{
System.out.println(i); //i变量在main方法内存活,出来是无法运行的
}
}
常量(Constant):
final 常量名 = 值;
final static double PI = 3.14;
static final double PI = 3.14;
/*在类变量定义之后,可以在局部变量中直接引用
修饰符final,static不存在先后顺序*/
变量的命名规范
Java语言支持如下运算符:
包机制(package):
创建一个包机制(package),其实质就是创建一个文件夹,便于管理代码文件(后续还会更深入的展开,这里先提一下)
具体操作如图所示:
package operator;
public class OperatorRun {
public static void main(String[] args) {
// 二元运算符
//快捷键:Ctrl+D:复制当行到下一行
int a = 10;
int b = 20;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);//输出结果为0,内存溢出
System.out.println(a/(double)b);
long c = 123123123123123L;
int d = 123123;
short e = 10;
byte f = 5;
System.out.println(c+d+e+f);//当运算数据类型中有long,输出结果就为long
System.out.println(d+e+f);//其余都是int
System.out.println(e+f);//int
//取余,模运算
int g = 22;
int h = 10;
System.out.println(g%h);// 22/10=2...2
//=================================
//关系运算符返回的结果:正确、错误--布尔值
//关系运算符常与if语句结合使用
int i1 = 10;
int i2 = 20;
System.out.println(a>b);//false
System.out.println(a<b);//true
System.out.println(a==b);//false
System.out.println(a!=b);//true
}
}
package operator;
public class OperatorRun {
public static void main(String[] args) {
//一元运算,自增自减运算符 ++ --
int a = 3;
int b = a++;//执行完这行代码后,先给b赋值,再自增
// a = a + 1;
System.out.println(a);
// a = a + 1;
// a = a + 1;
// a = a + 1;
int c = ++a;//执行完这行代码前,先自增,再给c赋值
System.out.println(a);
System.out.println(b);
System.out.println(c);
//=============================
//幂运算 2^3 = 2*2*2 = 8
//很多运算,我们会使用一些工具类来操作
double pow = Math.pow(2,3);
System.out.println(pow);
}
}
package operator;
public class OperatorRun {
public static void main(String[] args) {
//逻辑运算符:与&&(and)、或||(or)、非/取反!(not)
boolean a = true;
boolean b = false;
System.out.println("a && b:"+(a&&b)); //逻辑与运算:两个变量都为真,结果才为真
// false
System.out.println("a || b:"+(a||b)); //逻辑或运算:只要一个变量为真,结果就为真
// true
System.out.println("!(a||b):"+!(a||b)); //逻辑非运算,如果是真,则为假;反之相反
// false
//=======================
//短路运算,若是第一个变量为假,在逻辑与运算中,后面变量即使为真,也不会被运行,结果输出为假
int c = 5;
boolean d = (c<4)&&(c++>4);
System.out.println(d);
System.out.println(c);//输出还是5,没有执行c++=6
}
}
package operator;
public class OperatorRun {
public static void main(String[] args) {
//位运算符:二进制的运算规则
/*
A = 0011 1100
B = 0000 1101
---------------
A&B = 0000 1100 对应位都是1,输出为1(与)
A|B = 0011 1101 对应位都是0,输出为0,否则为1(或)
A^B = 0011 0001 对应两个位置都相同,输出为0;不相同输出为1(取反)
~B = 1111 0010 1反过来为0;0反过来为1(取反)
---------------
2*8=16 => 2*2*2*2
效率极高
<< 左移 *2
>> 右移 /2
背后的二进制运算机制:
0000 0000 = 0
0000 0001 = 1
0000 0010 = 2 逢2进1
0000 0011 = 3
0000 0100 = 4
0000 1000 = 8
0001 0000 = 16
*/
// 二进制运算
System.out.println(2<<3);
}
}
package operator;
public class OperatorRun {
public static void main(String[] args) {
// 扩展赋值运算符
int a = 10;
int b = 20;
a += b; // a = a + b
System.out.println(a);
a -= b; // a = a - b
System.out.println(a);
a *= b; // a = a * b
System.out.println(a);
a /= b; // a = a / b
// 字符串连接符:+运算符两侧若是出现了字符串String类型,则出现”“后边都转换为string进行连接
System.out.println(a+b);
System.out.println(""+a+b);//输出结果为1020,10与20转换成字符串进行连接
System.out.println(a+b+"");//与上边是有区别的,输出结果为30
// 三元运算符(条件运算符)
// x ? y : z
// 如果x==true,则结果为y,否则为z
int score = 80;
String type = score < 60 ? "不及格" : "及格";//必须掌握
// if控制流的简写版本
System.out.println(type);
}
}
为了更好地组织类,Java提供了包机制(其实质就是再创建一个文件夹,防止文件命名重复的问题),用于区别类名的命名空间
包语句的语法格式为:
package pkg1[.pkg2[.pkg3...]]
一般利用公司域名倒置作为包名;
例如:www.baidu.com => com.baidu.www
下面演示如何创建二三子级包:
创建一个包,在IDEA中《.src》文件下面进行创建,右键点击《.src》 — 【New】—【Package】,命名为“com.baidu.www”,不过如图所示,并没有生成子级包
在www包中创建java文件,会在文件开头显示package com.baidu.www;
(注意不能删除!)
为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用“import”语句可完成此功能
import package1[.package2...].(classname|*)
例如:在类中使用Date函数,就需要在类外导入相应的功能类
package com.baidu.www;
import java.util.Date;//引用语句只能在class外,在包机制下方,不能跑到包机制的上方
import com.baidu.base.Demo01;//表示引用com.baidu.base包下的Demo01类
import com.baidu.base.*;//表示导入这个包下所有的类
public class Demo01{
Date;
}
推荐查看《阿里巴巴Java开发手册》,里面列举了很多编程规范、异常日志、安全规约、工程结构等相关内容
javadoc命令是用来生成自己API文档的
参数信息
首先查找官方的API帮助文档[Java SE 文档 — API 和文档 | Oracle 中国],在页面内选择【核心API文档】的【8】版本,进入到JDK的帮助文档[Overview (Java Platform SE 8 ) (oracle.com)]
这里提供一下中文版的API[Java 8 中文版 - 在线API中文手册 - 码工具 (matools.com)]
下面实例演示如何生成自己的帮助文档:
package com.baidu.www;
//通过命令行 【javadoc 参数 java文件】 生成帮助文档
//类的文档注释
/**
* @author Szx
* @version 1.0
* @since 1.8
*/
public class JavaDoc {
String name;
//方法的文档注释
/**
* @author Szx
* @param name
* @return
* @throws Exception
*/
public String test(String name) throws Exception{
return name;
}
}
右键点击JavaDoc.java文件,选择【Open In】 — 【File Path】,然后再选择【JavaDoc.java】文件,便可以打开文件所在位置
在文件路径栏上,在开头输入cmd + 空格 + 回车键
,召唤出命令行窗口,并在命令行输入javadoc -encoding UTF-8 -charset UTF-8 JavaDOc.java
其中,encoding和charset参数设置为UTF-8是为了防止文件中的中文运行之后出现乱码的问题,从下图可以看出,虽然运行成功,但是同时也发出了3个警告
运行成功之后,返回文件夹,可以发现文件夹生成了很多其他文件,找到与《JavaDoc.java》同名的HTML文件,打开便可看到自己生成帮助文档
作业:学会查找使用IDEA生成JavaDoc文档,不会的”面向百度编程“