Java基础

注释

  • 单行注释
//这是一个单行注释
  • 多行注释
/*多行注释
多行注释
多行注释*/
  • JavaDoc:文档注释
/**
*@Desciption HelloWorld
*@author:Alingo
*/

数据类型

基本类型(primitive type)

数值类型

整数类型
  • byte占1一个字节范围:-128~127 (-2(8-1)~2(8-1)-1)

    对应类Byte

  • short占2个字节范围:-3276832767(-2<sup>(16-1)</sup>2(16-1)-1)

  • int占4个字节范围:-21474836482147483647(-2<sup>(32-1)</sup>2(32-1)-1)

    对应类Integer

  • long占8个字节范围:(-2(64-1)~2(64-1)-1)

long num = 30L; //long类型要在数字后面加一个L

整数扩展

int i = 10;
int i2 = 010; //八进制以0开头  所以i2的值是8
int i3 = 0x10; //十六进制以0x开头,0~9,A~F,所以i3的值是16 

浮点数扩展

float f = 0.1f;
float d = 1.0/10;
System.out.println(f==d);//true

float d1 = 232323232323232323f;
float d2 = d1 + 1;
System.out.println(d1==d2);//true

这是因为 float是 有限 离散 存在摄入误差 大约 接近但不等于的

所以最好完全避免使用浮点数进行比较!!!

对于银行业务,在使用 BigDecimal 数学工具类

字符扩展

编码 Unicode 表:(97 = a, 65 = A) 2字节 0~65536

转义符

// \t  制表符
// \n  换行
浮点类型
  • float占4个字节
float num2 = 50.1F;//float类型要在数字后面加一个F
  • double占8个字节
字符类型

char占2个字节

//字符
char name = 'A';
//字符串,String不是关键字,是一个类!
String name = "AAA";

boolean类型

占一位,其值只有true和false

引用类型(reference type)

接口

数组

类型转换

低------------------------------------------------------------------------->高

byte,short,char->int->long->float->double

运算中,不同类型的数据先转换为同一类型,再进行运算

(按字节数由低到高,但是long(8个字节),float(4个字节),但float浮点数强于整数)

强制类型转换(高-->低)

int i =128;
byte b = (byte)i;    //强制类型转换
System.out.println(i);    //128
System.out.println(b);    //-128  因为溢出了

自动类型转换(低-->高)


Tips:

  • 不能对布尔值进行转换

  • 不能把对象类型转换为不相干的类型

  • 转换的时候可能存在内存溢出,或精度问题

常见问题:

int money = 10_000_000;
int years = 20;
long total = money*years;
long total2 = (long)years*money;
System.out.println(total);    
/*-1474836480    溢出了,因为money*years先做乘法就会先默认得到int 再进行强制类型转换成long 但已经溢出了 */
System.out.println(total2);    
//20000000000

变量作用域

public class Variable{
    static int allClicks = 0;    //类变量 用static 标记
    String str = "hello world";    //实例变量

    public void method(){
        int i = 0;    //局部变量 写在方法里面
    }
}

运算符

public class Demo01 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(a/b);    //0    因为此时是int型

        System.out.println(a/(double)b);    //0.5
    }
}
  • 关系运算符:instaceof 用来测试一个对象是否为一个类的实例
boolean result = obj instance of Class
  • 位运算符: &,|,^,~,>>,<<,>>>

  • 条件运算符: ? :
// x ? y : z
//如果 x==true 则结果为y,否则结果为z

int score = 80;
String type = score < 60 ? "不及格" : "及格";    //"及格""

运算中有long结果为long, 有double(无long)结果为double 其他的都是int!!

public class Demo01 {
    public static String getType(Object a){
        return a.getClass().toString();
    }

    public static void main(String[] args) {
        long a = 12131231231231L;
        int b = 123;
        short c = 10;
        byte d = 8;
        double e = 123123131;
        byte f = 2;
        System.out.println(a+b+c+d);    //long类型
        System.out.println(b+c+d);      //int类型
        System.out.println(c+d);        //int类型  运算中有long结果为long, 有double(无long)结果为double 其他的都是int
        System.out.println(getType(a+d));   //long
        System.out.println(getType(b+e));   //double
        System.out.println(getType(d+f));   //int!!!
    }
}
  • 字符串连接符: ()+() 如果+两侧出现了字符串类型,则加号把两侧都先转换为字符串,再进行拼接
int a = 10;
int b = 20;
System.out.println("" + a + b);    //"1020"
System.out.println(a + b + "");    //"30"

包机制

等同于文件夹

  • 包语句的语法格式为:
package pkg1[. pkg2[. pkg3...]];

一般利用公司域名倒置作为包名: www.baidu.com: com.baidu.www

  • 导入包
import java.util.Date;       //注意 package必须放在代码的最上面
import com.feng.*    //通配符 导入这个路径下所有的package

JavaDoc

javadoc命令是用来生成自己的API文档的

参数信息

  • @author 作者名

  • @version 版本号

  • @since 指明需要最早使用的jdk版本

  • @param 参数名

  • @return 返回值情况

  • @throws 异常抛出情况

加在类上面就是类的注释 加在方法上面就是方法的注释

生成文档

  • 命令行生成
javadoc -encoding UTF-8 -charset UTF-8 Doc.java    //其中Doc.java是写的类
  • Idea 点击Tool GenerateJavaDoc