Java基本语法
注释、标识符、关键字
写代码要写注释。不然过了一个小时,上帝都不知道这代码要干什么。
-
单行注释
//文字内容 -
多行注释
/**/,内部是文字内容。 -
文档注释
/**
*@Descripion
*/
@变成了#064;在JavaDOS的时候会更详细的说明。
为了演示方便,新建一个空项目。
新建一个模块-》新建一个类-》项目模块-》选择当前版本对应的SDK和语言等级-》应用-》确定(搭建一个环境)
标识符与关键字
标识符
java的所有组成部分都需要名字。类名、变量名、方法名被称为标识符。
所有标识符都应该是以字母,$,或者下划线_ 开始的。
首字符后可以是字母,$,_,数字的任意符号组合。(一定不要随便使用#)
不能使用关键字做类名或方法名。
标识符是大小写敏感的。
可以使用中文命名,不过最好不要这么干。特别是用拼音……我敢打赌你不写中文注释一定会忘记这是个啥变量。
public class Hello {
public static void main(String[] args) {
//输出一个HelloWorld
System.out.println("Hello,World!");
/*这个是多行代码*/
//有趣的代码注释
}
}
关键字表
abstarct | assert | boolean | break | byte |
---|---|---|---|---|
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
translient | try | void | volatite | while |
数据类型
计算机语言大致分为两类:
- 强类型语言(java,C++)
要求变量的使用严格按照规定,所有变量都需要先定义后使用。 - 弱类型语言(JavaScript)
有自己的编辑器,有一定的规范化。
Java的数据类型分为两大类
- 基本类型(primitive type)
数值类型:
名称 | 字节数 | 表示范围 |
---|---|---|
整数类型 | ||
byte | 1 | -128~127 |
short | 2 | -32768~32767 |
int | 4 | -2147483648~2147483647 |
long | 8 | |
浮点类型 | ||
float | 4 | |
double | 8 | |
字符类型 | ||
char | 2字节 | |
逻辑类型 | ||
boolean | 占1位 | true或false |
public class Demo01 {
public static void main(String[] args) {
//八大基本数据类型
int num1=10; //最常用
byte num2=20;
short num3=30;
long num4=30L; //long类型要在后面加个L
//浮点型
float num5= 5.01F; //float类型要在后面加个F
double num6=3.141592653589;
//字符
char name='A';
//字符串String不是关键词,string是一个类
//布尔值
boolean flag=false;
}
}
- 引用类型(reference type)
-
类
-
接口
-
数组
非基本数据类型都是引用类型。
拓展:什么是字节?
位(bit)是计算机内部数据存储的最小单位。举个例子,11001100是一个八位二进制数。
字节(byte)是计算机中数据处理的基本单位,习惯上用B表示。
1B=8 bit;1024B=1KB;1024KB=1M;1024M=1G
字符:是指计算机中使用的字母,数字和符号。
电脑32位和64位指的是电脑寻址的能力。32位指的是处理器一次能处理的最大位数。最大寻址空间是2^32=4G左右。
public class Demo2 {
private static String original;
public static void main(String[] args) {
//整数拓展:进制 二进制0b 十进制 八进制0 十六进制0X
int i1=10;
int i2=010;
int i3=0X10;
int i4=0b10;
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
System.out.println("=================");
/**
* 浮点数扩展
* 银行业务怎么表示?
* 不要用float double来计算。
* 浮点数是有限的、离散的。有舍入误差,接近但不等于。最好完全不使用浮点数进行比较。
* BigDecimal 数学工具类
*/
float f=0.1f;
double d=1.0/10;
//都是0.1
System.out.println(f==d);
System.out.println(f);
System.out.println(d);
float d1=23134456f;
float d2=d1+1;
System.out.println(d1==d2);
System.out.println("=================");
/**
* 字符拓展
* 所有的字符本质上还是数字
* Unicode 2字节 65536
* 最早期的Excel最长 2^16 =65536
* U0000-UFFFF
* 转义字符
* \t \n
*/
char c1='a';
char c2='中';
System.out.println(c1);
System.out.println((int)c1); //强制类型转换
System.out.println(c2);
System.out.println((int)c2);
char c3='\u0061';
System.out.println(c3);
System.out.println("Hello\nWorld");
System.out.println("===============");
/**String sa=new String(original:"hello world");
String sb=new String(original:"hello world");
System.out.println(sa==sb);*/
String s1= "hello world";
String sd= "hello world";
System.out.println(s1==sd);
//对象,从内存级别分析
//布尔值的扩展
boolean flag=true;
int i=1;
if(flag==true)
i++;
if(flag)
i++;
//二者是相同的。代码要简洁易懂。
}
}
类型转换
运算中,不同类型的数据先转换为同一类型,然后进行运算。
类型转换从低到高进行。
public class Demo03 {
public static void main(String[] args) {
int i=128;
byte b=(byte)i;//内存溢出
System.out.println(i);
System.out.println(b);
}
}
-
强制类型转换
(类型)变量名 高——>低 -
自动类型转换
低——>高
tips:
- 不能对布尔类型进行转化
- 不能把对象类型转换为不相干的类型
- 高容量向低容量转化需要强制转换
- 转换的时候可能出现内存溢出或精度问题。
public class Demo03 {
public static void main(String[] args) {
System.out.println((int)23.7); //23
System.out.println((int)-45.89f); //-45
char c='a';
int d=c+1;
System.out.println(d);
System.out.println((char)d);
}
}
操作比较大的数时,注意溢出问题。
public class Demo03 {
public static void main(String[] args) {
//jdk7的新特性,数字之间可以用下划线划分。
int money=10_0000_0000;
int years=20;
int total=money*years;//-1474836480,计算的时候溢出了
long total2=money*years;
System.out.println(total);
System.out.println(total2);//默认是int,转换之前已经溢出了。
long total3=money*((long)years);//先把一个数转化为long
System.out.println(total3);
}
}
类也按照这样的格式进行类型转换。
变量、常量
变量是可以变化的量。
每个变量必须声明其类型。
变量是程序中最基本的存储单元。
type varName [=value] [{, varName[=value]}];
数据类型 变量名=值;
可以使用逗号隔开声明多个同类型变量。
每个变量都有类型,可以是基本类型,可以是引用类型。
变量名必须是合法的标识符
变量声明是一条完整的语句,声明完毕必须用;结尾。
最好一次声明一个变量
变量的作用域
类变量:static,在类内。
实例变量:没有关键词
局部变量:在方法内
public class Demo04 {
//属性:变量
static{
//代码块,这里的变量优先级很高
}
//类变量static
static double salary=2500;
//实例变量:从属于对象数值类型初始值0 boolean初始值 false 除了基本类型其余初始值都是null
String str="Hello World!";
String name;
int age;
//main方法
public static void main(String[] args){
//局部变量:生命周期在方法内,必须声明和初始化值。
int i=0;
System.out.println(i);
//变量类型 变量名字=new Demo04();
Demo04 demo04=new Demo04();
System.out.println(demo04.age);
System.out.println(demo04.name);
System.out.println(salary);
}
//其他方法
public void add(){
System.out.println(i);
}
}
常量Constant:初始化后不能改变的值
final 常量名=值;
final double PI=3.14;
常量名一般使用大写字母。
public class Demo05{
static final double PI=3.14;//一个静态常量
//修饰符不存在先后顺序
public static void main(String[] args)
System.out.println(PI);
}
变量的命名规范
所有方法、类名、变量:见名知意
类成员变量、局部变量、方法名:首字母小写,驼峰原则。除了第一个单词意外剩下的单词首字母都大写。
常量:大写字母和下划线
类名:首字母大写,驼峰原则
运算符
基本运算符
算数运算符: + - * / % ++ –
赋值运算符: =
关系运算符: > < >= <= == != instance of
逻辑运算符: && || !
位运算符: & | ^ ~ >> << >>>
条件运算符: ? :
扩展赋值运算符: += -= *= /=
package operator;
public class Demo01 {
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(a/(double)b);
}
}
结果:
30
-10
200
0.5
30
-10
200
0
---
123123123123264
141
18
```java
package operator;
public class Demo02 {
public static void main(String[] args) {
long a=123123123123123L;
int b=123;
short c=10;
byte d=8;
System.out.println(a+b+c+d);//long
System.out.println(b+c+d);//int
System.out.println(c+d);//int
//有long类型结果为long,除此之外都为int类型 cast==转换
}
}
结果:
false
true
false
```java
package operator;
public class Demo03 {
public static void main(String[] args) {
//关系运算符返回的结果:正确,错误 布尔值
int a=10;
int b=20;
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a==b);
}
}
结果:
1
false
true
false
package operator;
public class Demo03 {
public static void main(String[] args) {
//关系运算符返回的结果:正确,错误 布尔值
//if
int a = 10;
int b = 20;
int c = 21;
System.out.println(c%a);
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a==b);
}
}
结果:
5
5
3
3
5
5
4
5
5
3
3
5
5
package operator;
public class Demo04 {
public static void main(String[] args) {
// ++ -- 自增,自减(一元运算符)
int a =3;
int b=a++;//执行完这行代码前,先给B赋值,接着自增
//a=a+1,
System.out.println(a);
//a=a+1
int c=++a;//执行这行代码后,先自增
System.out.println(a);
System.out.println(a);
System.out.println(b);
System.out.println(b);
System.out.println(c);
System.out.println(c);
}
}
结果:
double pow=Math.pow(2,3);
System.out.println(pow);
很多运算都会使用一些工具类来做。
package operator;
//逻辑运算符
public class Demo05 {
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)));//是真为假,是假为真
//短路运算,前假,直接输出false,后面的不执行
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println(d);
System.out.println(c);
}
}
结果:
a&&b: false
a||b: true
!(a&&b): true
false
5
进程已结束,退出代码0
package operator;
public class Demo06 {
public static void main(String[] args) {
/**
* A=0011 1100
* B=0000 1101
*
* A&B(按位比较,同1为1)0000 1100
* A|B(按位比较,有1为1)0011 1101
* A^B(按位比较,相同为0)0011 0001
* ~B 1111 0010
*
* 2*8怎样运算最快?
* 2*8=16 2*2*2*2
* <<左移 *2
* >>右移 /2
*/
System.out.println(2<<3);
}
}
结果:
16
位运算效率极高。
package operator;
public class Demo07 {
public static void main(String[] args) {
int a=10;
int b=20;
a+=b;
System.out.println(a);
//字符串连接符 + 两侧出现string类型,输出结果为string类型
System.out.println(a+b);
System.out.println(""+a+b);
}
30
50
3020
package operator;
public class Demo07 {
public static void main(String[] args) {
int a=10;
int b=20;
//a+=b;
//System.out.println(a);
//字符串连接符 + 两侧出现string类型,操作数转换为string类型进行连接
System.out.println(a+b);
System.out.println(""+a+b);
System.out.println(a+b+"");
}
}
30
1020
30
package operator;
public class Demo08 {
//三元运算符
public static void main(String[] args) {
// x?y:z
// 如果x==true,输出y;x==false,z
int score=80;
String type= score<60?"不及格":"及格";
System.out.println(type);
}
}
及格
包机制
包的本质是文件夹。
一般利用公司域名倒置作为包名。例如:com.kuangstudy.blog
package必须放在最上面。
import导入。
尽量不要让包的名字重复。
Ctrl+鼠标右键可以跳转包
alt+enter 自动纠错
package pkg1[. pkg2[. pkg3…]];
import package1[. package2[. package3…]];
//导入这个包下所有的类
import com.kuang.base.*;
课外阅读:《阿里巴巴Java开发手册》
JavaDoc
生成一个API文档。Java SE API-》8-》
[在线API帮助文档][https://docs.oracle.com/javase/8/docs/api/]
参数信息
新建Doc类
package com.star_line;
/**
* @author Star_Line
* @version 1.0
* @since 1.8
*/
public class Doc {
String name;
/**
* @author Star_Line
* @param name
* @return
* @throws Exception
*/
public String test(String name) throws Exception{
return name;
}
}
常见的内容:
@author 作者名
@version 版本号
@since 指明需要最早使用的jdk版本
@param 参数名
@return 返回值情况
@throws 异常抛出情况
打开代码所在的文件夹,输入CMD打开命令行窗口。输入javadoc -encoding utf-8 -charset utf-8 Doc.java,回车键生成,点击index.HTML查看。
javadoc (CMD命令行)+参数+java文件名
作业:学会查找使用IDEA生产JavaDoc文档 (面向百度编程)
- 新建一个文件夹,存放Javadoc文档。
- 打开IDEA选择要生成文档的代码。
- 工具——生成JavaDoc——输出目录——选择文件夹
- 在locale输入zh_CN,在下方框中输入 -encoding utf-8 -charset utf-8
- 点击OK,打开JavaDoc文件夹。点击index.HTML可以查看生成的API文档。
基础部分每天都在用,记牢。