JAVA基础
一、注释
书写注释是一个非常好的习惯!平时写代码注意规范
java三种注释:单行注释、多行注释、文档注释
- 单行注释:// 内容
- 多行注释:/*内容 */
- 文档注释(JavaDoc):/** 内容 */
二、标识符
关键字:public、static、void、class、int等
标识符:所有的标识符都应该以大小写字母、$或_开始(标识符是大小写敏感的,可以使用中文但不规范)
三、数据类型
基本类型(整数类型、浮点类型、字符类型、布尔类型)、引用类型
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.154854613165;
//字符
char name= '国';
//字符串:String 不是关键字,是一个类
String nameA= "荔枝";
// 布尔值:是非
boolean flag= true;
boolean flag1 = false;
}
★★★★★ String不是关键字,而是一个类
数据类型的拓展
// 整数的拓展: 进制 二进制0b 十进制 八进制0 十六机制0x
int i=10;
int i2=010;
int i3=0x10;
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
//浮点数的拓展:银行业务怎么表示?——使用一个类:BigDecimal 数学工具类
// float :有限 离散 舍入误差 大约 接近但不等于
// 最好完全使用浮点数进行比较,少用浮点数进行比较
float a=0.1F;
double b=1.0/10;
System.out.println(a == b); //输出false!!!!
System.out.println(a); // 输出0.1
System.out.println(b); // 输出0.1
float d1=2313131331313f;
float d2=d1+1;
System.out.println(d1 == d2);//输出true!!!!!
//字符串拓展
char c1='a';
char c2='中';
System.out.println(c1);
System.out.println((int)c1);//int强制转换,所有字符的本质还是数字,unicode编码(0-65536)
System.out.println(c2);
System.out.println((int)c2);
char c3='\u0061';
System.out.println(c3); //输出a \u进行转义
// 转义符
// \t :制表符 \n :换行
System.out.println("Hello \n world");
String s1=new String("Hello world");
String s2=new String("Hello world");
System.out.println(s1==s2);// 输出false
String s3="Hello world";
String s4="Hello world";
System.out.println(s3==s4);// 输出true 此现象需要从内存的角度进行分析
//布尔的拓展
boolean flagA=true;
if(flagA== true){}
if(flagA){} // 两行意思一样,true可省略表示,增强代码易读性
四、类型转换
数据类型的优先级:
public static void main(String[] args) {
int i=128;
byte b=(byte) i;//内存溢出 byte最大值127 使用(类型名)进行强制转换
System.out.println(i);
System.out.println(b); // 输出-128
// 强制转换 高-低
// 自动转换 低-高
double d=i;
System.out.println(d);// 输出128 自动转换
}
★★★★★注意点:
- 不能对布尔类型进行转换
- 不能把对象类型转换成不相干的类型
- 在把高容量转换到低容量是进行强制转换,反之,直接自动转换
- 转换过程中可能存在内存溢出,或者精度的问题!
System.out.println((int)23.7); //输出23
System.out.println((int)-45.89f);// 输出-45
char aa='a';
int dd=aa+1;
System.out.println(dd); //98
System.out.println((char)dd); //b
//操作比较大的数的时候,注意溢出的问题
//JDK7新特性,数字之间可以使用下划线分割
int money=10_0000_0000;
int years=20;
int total=money*years;//-1474836480 ,计算时溢出了
long total1=money*years;//-1474836480 ,因为默认时int类型,在进行转换之前已经出现了问题
long total2=money*(long)years;
System.out.println(total2);//20000000000 先转换,得到正常计算
五、变量
变量的作用域
- 类变量:加上关键字 static
- 实例变量:在类里定义
- 局部变量:在方法里边
常量
变量命名规范
六、运算符
public static void main(String[] args) {
//二元运算符
//ctrl+d:复制本行到下一行
int a = 10;
int b = 20;
int c = 30;
int d = 40;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);// 0 -结果0.5,但是int类型,转换成了0
System.out.println(a/(double)b);//0.5
}
public static void main(String[] args) {
long a = 12313213213132123L;
int b = 123;
short c = 10;
byte d = 8;
double e = 2.515;
System.out.println(a+b+c+d);//12313213213132264 Long 如果有long类型,则结果就是long类型
System.out.println(e+b+c+d);//143.515 double 如果有double,则结果就是double
System.out.println(b+c+d);//141 int 没有long类型,结果都为int
System.out.println(c+d);//18 int
}
public static void main(String[] args) {
//关系运算符的返回结果:正确、错误 布尔值
int a = 10;
int b = 20;
int c = 21;
System.out.println(a>b);//false
System.out.println(a<b);//ture
System.out.println(a==b);//false
System.out.println(a!=b);//ture
System.out.println(c%a);//1 取余 模运算
}
public static void main(String[] args) {
// ++ __ 自增、自减 一元运算符
int a = 3;
int b = a++; // a++ 先赋值再自增
//a=a+1
System.out.println(a);
//a=a+1
int c = ++a; // ++a 先自增再赋值
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);
}
public static void main(String[] args) {
//逻辑运算符 与或非
boolean a = true;
boolean b = false;
System.out.println("a && b "+(a&&b)); //逻辑与运算:两个变量都为真,结果才为true
System.out.println("a || b "+(a||b)); //逻辑或运算:两个变量有一个为真,结果就为true
System.out.println("!(a&&b) "+(!(a&&b)));// 如果为真,则变为假;如果为假,则变为真
// 短路运算
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println(d);
System.out.println(c);// 5 ,因为这里进行了短路运算,c<4为假,则程序就不去执行后面的条件了,直接返回false
}
public static void main(String[] args) {
//位运算 效率极高
/*
A = 0011 1100
B = 0000 1101
A&B = 0000 1100(上下都为1,才为1,否则为0)
A|B = 0011 1101(上下都为0,才为0,否则为1)
A^B = 0011 0001(上下相同则为0,上下不同则为1)
~B = 1111 0010(取反)
面试题:2*8怎么运算最快?
2*8 = 16 2*2*2*2
<<左移 >>右移 左移变大,右移变小
<< *2
>> /2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
System.out.println(2<<3);//16
}
public static void main(String[] args) {
//扩展赋值运算符
int a = 10;
int b = 20;
a+=b;//a=a+b
a-=b;//a=a-b
System.out.println(a);
//字符串连接符 ,再+号两侧如果出现String类型,就会全部转换成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 score = 80;
String s = score < 60 ? "不及格" : "及格";
System.out.println(s);//及格
}
运算符的优先级
七、包机制
一般是公司域名的倒置作为包名;在类中,package在最上面
使用import进行导包;并且import放在上面,在package下面;
import com.ly.base.*——星号是通配符,可以直接导入包下的所有类;
八、JAVADoc
JavaDoc命令用于生成自己的API文档
cmd命令:javadoc -encoding UTF-8 -charset UTF-8 Doc.java 生成JavaDoc文档index.xml
package operator;
//类注释
/**
* @author lyy
* @version 1.0
* @since 1.8 最早的版本
*/
public class Doc {
String name;
//方法注释
/**
* @param name
* @return
* @throws Exception
* @author lyy
*/
public String test(String name) throws Exception {
return name;
}
}