Java基础语法
Java基础语法
注释
1.注释是当项目复杂的时候,用来给写代码的人看的,并不会执行的一串代码
2.写注释是一个非常好的习惯
3.注释有三种
- 单行注释
//单行注释
- 多行注释
/*
多行注释
*/
- 文档注释
/**
* @Descrioption HelloWorld
*@Author xiyuan
*/
4.有趣的代码注释
标识符和关键字
1.java所有的组成成分都需要名字,类名、 变量名以及方法名都被称之为标识符。
String teacher = "abc" ;
2.所有标识符必须由字母(A-Z或者a-z),美元符"$"),下划线“”开始命名
3.首字母之后可以是字母(A-Z或者a-z),美元符"$",下划线“” 或者数字的任何字符组合
4.关键字不能作为标识符,关键字是Java自用有特殊意义的字母组合
4.命名举例 :
- 合法标识符:age、$salary、_value、__1_value
- 非法标识符:123abc、-salary
5.标识符是大小写敏感的
6.可以使用中文命名,但是一般不建议使用,也不建议使用拼音
7.常用命名规则注意事项:
- 包名:全部小写,多级包使用”.“隔开例如:com.itzcl.www
- 类和接口:首字母大写,第二个单词大写(大驼峰命名法),例如:HelloWorld
- 方法或变量:第一个单词首字母小写,第二个单词首字母大写(小驼峰命名法),例如:testDemo
- 常量:全部大写,和第二个单词之间使用”_“隔开,例如:TEST_DEMO
数据类型
1.强类型语言
- 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用
- 安全性高,但是速度比较慢
2.弱类型语言
- 要求变量的使用可以不符合规定,所有变量都不需要先定义后才能使用
String a = "hello" ;
int num = 10;
System.out.println(a);
System.out.println(num);
3.Java的数据类型分为两大类
- 基本类型(primitive type)
- 数值类型
- 整数类型
- byte占1个字节范围:-128~127
- short占2个字节范围
- int占4个字节范围
- long占8个字节范围
- 浮点类型
- float占4个字节
- double占8个字节
- 字符类型
- chair占2个字节
- 整数类型
- 数值类型
- boolean类型
- 占一个字节,值只有true和false两个
- 引用类型(reference type)
- 类
- 接口
- 数组
//八大基本数据类型
//整数 最常用int
byte num1 = 10 ;//小于128
int num2 = 20 ;//小于21亿
short num3 = 30;
long num4 = 30L;//long类型结尾加上L
//小数,浮点数
float num5 = 50.1F;//float类型结尾加上F
double num6 = 3.141592653589793238462643 ;
//字符
char name = 'a';
//字符串,String不是关键字,类
String namea = "aa";
//布尔值:是非
boolean flag1 = true
boolean flag2 = false;
- 后缀字母要大写以防出现“l”看成“1”的情况
4.字节
- 位(bit):计算机内部存储的最小单位,习惯性用小写字母“b”来表示,10011000是一个8位二进制数,
- 字节(byte):计算机数据处理的基本单位,习惯用大写字母“B”来表示
- 1B=8b
- 字符:指计算机中使用的字母数字,字和符号
5.进制
二进制 0b开头
八进制 0开头
十进制
十六进制 0x开头
/*整数扩展
进制
二进制0b
八进制 0开头
十六进制 0x
*/
int i1 = 10;
int i2 = 010;//八进制0
int i3 = 0x10;//十六进制0x A~F
System.out.println(i1);//10
System.out.println(i2);//8
System.out.println(i3);//16
6.浮点数拓展
- 银行业务怎么表示? 钱?
- 使用类 BigDecimal
- float是有限、离散,有舍入误差 大约,接近却不等于
- double
- **最好完全避免使用浮点数进行比较**
- **最好完全避免使用浮点数进行比较**
- **最好完全避免使用浮点数进行比较**
float f = 0.1f;
double d = 1.0/10
System.out.println(f)
;System.out.println(d);
System.out.println(f==d);//false
float f1 = 46489789949f;
float f2 = f1 + 1;
System.out.println(f1 == f2);//ture
7.字符拓展
char c1 = 'a';
char c2 = '中';
System.out.println(c1);//a
System.out.println((int)c1);//97
System.out.println(c2);//中
System.out.println((int)c2);//20013
- 所有的字符本质上都是数字
- 编码问题 Unicode 2个字节 早些年最多65536个字符 EXcel以前最高2^16=65536 从U0000~UFFFF
char c3 ='\u0061';
System.out.println(c3);//a
8.转义字符
- \t 制表符
- \n 换行
- 等
System.out.println("Hello\tWorld");//Hello World
System.out.println("Hello\nWorld");//Hello
//World
9.从内存分析
面向对象从内存分析
String sa = new String("hello world");
String sb = new String("hello world");
System.out.println(sa);//hello world
System.out.println(sb);//hello world
System.out.println(sa==sb);//false
String sc = "hello world";
String sd = "hello world";
System.out.println(sc);//hello world
System.out.println(sd);//hello world
System.out.println(sc==sd);//ture
10.布尔值拓展
- 只有true和false
boolean flag = true
;if(flag==true){
}if(flag){}//less is more!
11.类型转换
- java是强类型语言,所有有时候需要强制类型转换
- 运算中要把不同类型的数据先转化为同一类型数据,然后进行运算
- 强制转换 :(类型)变量名 高---低
char f= 'a';
int g= f+1;
System.out.println(f);//a
System.out.println((char)g);//b
int i = 128;
byte b =(byte)i;//内存溢出
System.out.println(i);//128
System.out.println(b);//-128
- 自动转换:自动 低---高
int i = 128;
double b =(byte)i;//内存溢出
System.out.println(i);//128
System.out.println(b);//128.0
- 注意点
- 不能对 布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 再把高容量类型转换为低容量的时候,强制转换
- 转换的时候可能存在内存溢出,或者精度问题(高转低损失精度)
System.out.println((int)99.7);//99
System.out.println((int)-45.89f);//-45
//操作比较大的数时候,注意溢出问题
//jdk7新特性,数字之间可以用下滑线分割
int money = 1_000_000_000;
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);//先把一个数提升为long
intSystem.out.println(total3);//20000000000
变量
1.变量就是可以变化的量,存储在内存中
2.Java是一种强类型语言每个变量都必须声明其类型
3.Java变相是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域
type varName [=value] [{,varName{=value]}];
// 数据类型 变量名=值 ; 可以使用逗号隔开赖生明多个同类型变量
- 注意事项
- 每个变量都有类型,类型可以是基本类型,也可以是引用类型。
- 变量名必须是合法的标识符
- 变量声明是一条完整的语句, 因此每一个声明必须以分号结束
int a = 1;
int b = 2;
int c = 3;
String name = "aaaa";
char d = 'd';
double pi = 3.14;
5.变量作用域
- 局部变量
- 作用在一个方法内,必须声明和初始值
public class Demo08 {
//main方法
public static void main(String[] args) {
//局部变量
int i =3;
System.out.println(i);//3
}
//其他方法
public void add(){
System.out.println(i);//无法调用
}
}
- 实例变量
- 在方法的外面,类的里面,从属于对象;
public class demo08 {
//实例变量:从属于对象,;如果不自行初始化,则为这个类型的默认值 数值类型0/0.0 字符串0000 布尔值 默认false 除了基本类型其余默认值都是null
String name;
int age;
public static void main(String[] args) {
//变量类型 变量名字=
Demo08 demo08 =new Demo08();
System.out.println(demo08.age);//0
System.out.println(demo08.name);//null
}
}
- 类变量
- 加一个关键字static
public class Demo08 {
static double salary = 2500;
public static void main(String[] args) {
System.out.println(salary);//2500.0
}
}
6.常量
- 关键字final
- 常量:初始化之后不能改变值,不会变动的值
- 可以理解成特殊的变量,值被设定后,在程序运行中不允许改变
public class Demo09 {
//final 为修饰符不存在先后顺序
static final double a = 3.14;
final static double b = 3.14;
public static void main(String[] args) {
System.out.println(a);//3.14
System.out.println(b);//3.14
}
}
7.变量的命名规范
- 所有的变量,方法,类名:见名知意
- 类成员变量:首字母小写和驼峰原则: 除了第一个单词意外后面的单词首字母大写 mouthSalary
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线: MAX_VALUE
- 类名:首字母大写,遵守驼峰原则: Man,GoodMan
- 方法名:首字母小写和驼峰原则:run(),runRun()
运算符
-
算术运算符:+,-,*,/,%,++,--
-
赋值运算符:=
-
关系运算符:>,<,>=,<=,==,!=,instranceof
-
逻辑运算符:&&,||,!
-
位运算符:&,|,^,~,>>,<<,>>>
-
条件运算符:? :
-
扩展赋值运算符:+=,-=,*=,/=
1.二元运算符
//二元运算符
//ctrl+d:复制当前行到下一行
int a = 10;
int b = 20;
int c = 30;
int d =40;
System.out.println(a+b);//30
System.out.println(ab);//-10
System.out.println(a*b);//200
System.out.println(a/(double)b);//0.5
System.out.println(a%b);//10
long a = 1234864844651651313L;
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((String)(c+d));//无法转换
//关系运算符返回的结果: 正确 错误 布尔值
//if
int a = 10;
int b = 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
2.一元运算符
//++ -- 自增 自减 一元运算符
//if循环
int a = 3;
System.out.println(a);//3
int b = a++;
System.out.println(a);//4
int c = ++a;
System.out.println(a);//5
System.out.println(b);//3
System.out.println(c);//5
//幂运算 2^3 2*2*2=8
double pow = Math.pow(2,3);
System.out.println(pow);//8.0
//很多运算会使用工具类来计算
3.逻辑运算符,位运算符
- 与(and) 或(or) 非(取反)
boolean a =true;
boolean b = false;
//逻辑与运算:两个变量都为真,结果才为true
System.out.println(" a && b :"+(a&&b));//a && b :false
//逻辑或运算:两个变量又一个为真,结果为ture
System.out.println(" a || b :"+(a||b));//a || b :true
//逻辑取反:如果为真则变为假,反之亦然
System.out.println(" ! (a && b) :"+(!(a&&b)));//! (a && b) :true
- 短路运算:与运算中前一项为假时后面程序不会执行
int c = 5
;boolean d = (c<4)&&(c++<4);
System.out.println(d);//false
System.out.println(c);//5
- 位运算
A = 0011 1100
B = 0000 1101
A&B 0000 1100
A|B 0011 1101
A^B 1100 0010
~B 1111 0010
/*
2*8=16
2*2*2*2
<< 左移 *2
>> 右移 /2
0000 0000
00000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
计算2*几最快方式就是把急进行位运算,左移或者右移
System.out.println(2<<3);//16
4.拓展赋值运算符
- 拓展赋值运算符
int a = 10;
int b = 20;
a+=b;//a=a+b
System.out.println(a);//30
a-=b;//a=a-b
System.out.println(a);//10
- 字符串连接符 +,将String类型之后的的所有东西全部转化为String类型
int a = 10;
int b = 20;
System.out.println(a+b);//30
System.out.println(""+a+b);//1020
System.out.println(a+b+"");//30
5.三元运算符
- ? :
- x ? y : z
- 如果x结果为ture则结果为y,否则结果为z
int score1 = 80;
int score2 = 50;
String type1 = score1<60 ?"不及格":"及格";
String type2 = score2<60 ?"不及格":"及格";
System.out.println(type1);//及格
System.out.println(type2);//不及格
6.优先级
- 用括号
包
- 为了更好的组织类,Java提供了包机制,用于区分类名的命名空间
- 包语句的语法格式为:
package pkg1[. pkg2[pkg3...]];
- 一般用公司域名倒置作为包名;
- 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用“import”语句可以完成此功能
- package 应在 import 前面
import package1[.package2[.package3...]].(classname|*);
JavaDoc
- javadoc命令是用来生成自己APi文档的
- 可以利用CMD中javadoc命令可以生成
- IDEA生成javadoc文档
- 在工具栏中找到tool,然后再子菜单中找到 Generate JavaDoc
- 在生成文档上进行配置
- 参数信息
- @author 作者名
- @verson 版本号
- @since 指明需要最早使用的jdk号
- @param 参数名
- @return 返回值情况
- @throws 异常抛出情况
package base;
/**
* @author xiyuan
* @version 1.0
* @since 1.8
*/
public class Doc {
String name;
/**
*
* @param name
* @return
* @throws Exception
*/
public String test(String name) throws Exception{
return name;
}
}