Java基础学习
注释
- 单行注释:只能注释单行文字
//单行注释
- 多行注释:可以注释多行文字
/*
多行注释
多行注释
*/
- JavaDoc:文档注释
/**
* @Description HelloWorld
* @Author CheemsNow
*/
标识符
- 所有的标识符只能以字母(A-Z或a-z),美元符($),或者下划线(_)开始
- 首字符之后可以是字母(A-Z或a-z),美元符($),下划线(_)或数字的任何字符组合
- 不能使用关键字作为变量名或方法名
- 标识符大小写敏感
- 合法标识符举例:
age、$salary、_value、__1_value
- 非法标识符举例:
123abc、-salary、#abc
- 可以使用中文命名,但不推荐,也不要用拼音,很low
String 变量名 = "变量名" String bianLiangMing = "变量名"
数据类型
- 强类型语言
- 要求变量的使用严格符合规定,所有变量都必须先定义后才能使用(安全性↑,效率↓)
- 弱类型语言
- 和强类型语言相反
- 基本类型
- 整数类型
- byte:占1个字节范围
- short:占2个字节范围
- int: 占4个字节范围
- long: 占8个字节范围
- 浮点类型
- float:占4个字节范围
- double: 占8个字节范围
- 字符类型
- char: 占2个字节范围
- 布尔类型
- boolean: 占1个位,只有true和false
//八大数据类型
//整数
int num1 = 10; //最常用
byte num2 = 20;
short num3 = 30;
long num4 = 30L; //long类型要在数字后面加个L
//小数:浮点数
float num5 = 50.1F //float类型要在数字后面加个F
double num6 = 3.141592653589793238462643
//字符
char name = '国';
//布尔值:是非
boolean flag1 = true;
boolean flag2 = false;
- 补充知识:字节
- 位(bit):计算机内部数据存储的最小单位,11001100是一个八位二进制数
- 字节(byte):数据处理的基本单位,用大写B表示
- 1B(byte,字节)= 8bit(位)
- 字符:计算机中使用的字母、数字、字和符号
- 1bit表示1位,1Byte表示一个字节 1B=8b。
- 1024B = 1KB,1024KB = 1M,1024M = 1G
- 数据类型扩展
//整数扩展:进制 二进制:0b 十进制 八进制:0 十六进制:0x int i1 = 10; int i2 = 010; //八进制(0) 8 int i3 = 0x10; //十六进制(0~9 A~F) 16 //浮点数扩展:最好避免使用浮点数进行比较,推荐使用BigDecimal数学工具类 //float 有限 离散 舍入误差 大约 接近但不等于 //double float f = 0.1F; //0.1 double d = 1.0/10; //0.1 System.out.println(f==d); //false float d1 = 23131312312312313F; float d2 = d1 + 1; System.out.println(d1==d2); //true //字符扩展 char c1 = 'a'; char c2 = '中'; System.out.println((int)c1); //强制转换 97 //所有的字符本质还是数字 //编码 Unicode 表:(97=a 65=A) 2字节 //U0000 UFFFF char c3 = '\u0061'; System.out.println(c3); //a //转义字符 //\t 制表符 //\n 换行 System.out.println("Hello\tWorld"); //Hello World String sa = new String("Hello World"); String sb = new String("Hello World"); System.out.println(sa==sb); //false 比较的是内存地址 String sc = "Hello World"; String sd = "Hello World"; System.out.println(sc==sd); //true 比较的是具体的值 //布尔值扩展 boolean flag = true //if(flag==true){}等价于if(flag){} //Less is More! 代码要精简易读 一般使用if(flag){}这种写法
- 类型转换
- 由于Java是强类型语言,所以进行某些运算的时候需要进行类型转换
低 ---------------------------> 高 byte,short,char->int->long->float->double //浮点数优先级大于整数
- 运算中,不同类型数据要先转化为同一类型才能运算
- 类型的转换分为强制类型转换和自动类型转换
//强制转换 (类型)变量名 高---低 int i = 128; byte b = (byte)i; //-128 内存溢出 //自动转换 低---高 int i =128; double d = i;
/* 注意点: 1. 不能对布尔值进行转换 2. 不能把对象类型转换成不相干的类型 3. 在把高容量转换到低容量的时候,强制转换 4. 转换的时候可能存在内存溢出,或者精度问题 */ 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); //98 System.out.println((char)d); //b
//操作比较大的数的时候要注意溢出的问题 //JDK新特性:数字间可以用下划线分割 int money = 10_0000_0000; int years = 20; int total = money*years; //-1474836480,计算的时候溢出 long total2 = money*years; //默认是int,转换前已经出问题,结果同上 lont total3 = money*((long)years); //20亿 先转换为long类型
- 由于Java是强类型语言,所以进行某些运算的时候需要进行类型转换
- 引用类型
- 类
- 接口
- 数组
变量
- 变量就是可以变化的量:用于确定一个空间,空间里的内容不确定
- 由于Java是强类型语言,每个变量都必须先声明类型
- Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域
type varName = [=value] [{,varName[=value]}]; //数据类型 变量名=值; //可以使用逗号隔开来声明多个同类型的变量,但不推荐,要保证代码的可读性
- 注意事项:
- 每个变量都有类型,类型可以使基本类型和引用类型
- 变量名必须是合法的标识符
- 变量声明是一条完整的语句,因此每一个声明都必须以分号结束
char x = 'x';
- 变量的作用域
- 类变量
- 实例变量
- 局部变量
public class Variable{ static int allClicks = 0; //类变量:实例变量前面加个static,static是修饰符,不存在先后顺序 String str = "hello world"; //实例变量:从属于对象;如果不初始化,则使用默认值 0 0.0 //布尔值默认是false,除了基本类型,其余默认都是null public void method(){ int i = 0; //局部变量:必须声明和初始化值 } }
- 变量的命名规范
- 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写和驼峰原则:monthSalary
- 局部变量:首字母小写和驼峰原则
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则:Man,GoodMan
- 方法名:首字母小写和驼峰原则:run(),runRun()
常量
- 常量(Constant):初始化(initialize)后不能改值,即不变的值
- 常量可理解为特殊的变量,值被设定后,在程序运行过程中不能改变
final 常量名=值; final double PI=3.14;
- 常量名一般使用大写字符
运算符
- Java语言支持的运算符:优先级使用()
- 算术运算符:+,-,*,/,%,++,--
//一元运算符 自增++ 自减-- int a = 3; int b = a++; //先赋值再自增,b=3,a=4 int c = ++a; //先自增再赋值,a=5,c=5 //幂运算 2^3 2*2*2=8 很多运算会使用工具类操作 double pow = Math.pow(3,2); //3的2次方,结果是9
- 赋值运算符:=
package operator; //二元运算符 int a = 10; int b = 20; System.out.println(a+b); //30 System.out.println(a-b); //-10 System.out.println(a*b); //200 System.out.println(a/(double)b); //0.5 System.out.println(b%a); //0 20/10=2...0 //要注意作用域,当结果有可能有小数时,要强制转换,防止精度丢失 //其中,当运算的数据类型有long(double)时,输出结果默认为long(double),否则为int
- 关系运算符:>,<,>=,<=,==,!=,instanceof
//关系运算符返回的结果:正确,错误 布尔值 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
- 逻辑运算符:&&,||,!
//逻辑运算符 //与(and):两个真才为真 //或(or):一个真则为真 //非(取反):真则假,假则真 //异或:相同为假,不同则真 boolean a = true; boolean b = false; System.out.println(a && b); //false System.out.println(a || b); //true System.out.println(!(a && b)); //true //短路运算 int c = 5; boolean d = (c<4)&&(c++<10); System.out.println(d); //false System.out.println(c); //5 因为(c<4)为假,所以(c++<10)就不需要运算了
- 位运算符:&(与),|(或),^(异或),~(非),>>,<<,>>>(无符号右移,始终补0,不考虑正负数)(了解即可)
/* A = 0011 1100 B = 0000 1101 A&B = 0000 1100 A|B = 0011 1101 A^B = 0011 0001 ~B = 1111 0010 */ //2*8如何运算最快 2*8=16 2*2*2*2 //<<(左移) *2 //>>(右移) /2 System.out.println(2<<3); //16 /* 0000 0010 2 0000 0100 4 0000 1000 8 0001 0000 16 底层直接改,效率极高 */
- 条件运算符:?:
//三元运算符 //x?y:z //如果x为真,x=y,否则x=z int score = 80; String type = score < 60 ?"不及格":"及格";
- 扩展赋值运算符:+=,-=,*=,/=
a+=b; //a = a+b; a-=b; //a = a-b; //字符串连接符 +,String System.out.println(a+b); //30 System.out.println(""+a+b); //1020 System.out.println(a+b+""); //30 先计算再链接字符串
- 算术运算符:+,-,*,/,%,++,--
包机制(包的本质就是文件夹)
- 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间
- 包语句的语法格式为:
package pkg1[.pkg2[.pkg3...]];
- 一般利用公司域名倒置作为包名:com.baidu.www
- 为了能够使用某一个包的成员,需要在Java程序中使用"import"语句导入该包
import package1[.package2].(classname|*);
JavaDoc
- javadoc命令是用来生成自己的API文档的
- 参数信息
- @author 作者名
- @version 版本号
- @since 指明需要最早使用的jdk版本
- @param 参数名
- @return 返回值情况
- @throws 异常抛出情况
//在命令行
javadoc -encoding UTF-8 -charset UTF-8 文件名
//-encoding设置编码 -charset设置字符集 防止乱码
//idea中,在工具栏中找到 Tool,然后在子菜单中找到 Generate JavaDoc,填好配置信息生成文档