Java基础(一)

Java基础(一)

一、注释

1. 单行注释

//单行注释

2. 多行注释

/*
多行注释
*/

3. 文档注释

/**
*文档注释
*/

二、标识符

关键字

Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。

Java关键字

abstract 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
transient try void volatile while

注意点

  • 所有的标识符都应该以字母(A ~ Z或者a ~ z)、美元符($)、或者下划线(_)开始

  • 首字符之后可以是字母(A ~ Z或者a ~ z)、美元符($)、下划线(_)、或数字的任何字符组合

  • 标识符是大小写敏感

  • 不能使用关键字作为变量名或方法名

  • 可以使用中文命名,但不建议,很low

三、数据类型

  • 强类型语言
    • 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用Java是强类型语言
  • 弱类型语言
    • Visual Basic、JavaScript
  • Java的数据类型分为两大类
    • 基本类型(primitive type)
    • 引用类型(reference type)

基本数据类型

引用数据类型

拓展:什么是字节

  • 位(bit):是计算机内部数据储存的最小单位,11001100是一个八位二进制数。

  • 字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示

  • 1B(byte,字节) = 8bit(位)

  • 字符:是指计算机中使用的字母、数字、字和符号

  • 1bit,1位

  • 1Byte,1个字节,1Byte = 8bit,1B = 8b

  • 1024B = 1KB

  • 1024KB = 1MB

  • 1024MB = 1GB

代码:

import java.math.BigDecimal;

public class Demo02 {
    public static void main(String[] args) {
        //八大基本数据类型

        //整数,常用int
        int num1 = 10;      //取值范围:-2147483648~2147483647
        byte num2 = 20;     //取值范围:-128~127
        short num3 = 30;    //取值范围:-32768~32767
        //long类型要在数字后面加L
        long num4 = 30L;    //取值范围:-9223372036854775808~9223372036854775807

        //小数:浮点数        超过位数容易造成精度丢失
        float num5 = 50.132225f; //float类型要在小数后面加F
        double num6 = 3.1415926535897935;   //精度丢失

        //精度丢失解决方法
        BigDecimal bignum1=new BigDecimal("3.14159265358979323846");
        BigDecimal bignum2=new BigDecimal("2.54517924114656515555");
        System.out.println(bignum1);
        BigDecimal bignum3 = null;
        bignum3 = bignum1.add(bignum2);
        System.out.println(bignum3);


        //字符
        char name = 'A';
        /**
         * 字符串,String不是关键字,是类
         * String name = "董晓龙"
         */

        //布尔值(只有两个值):是,非
        boolean a = true;
        boolean b = false;

        System.out.println("num1="+num1+"\nnum2="+num2+"\nnum3="+num3+"\nnum4="+num4+"\nnum5="+num5
                +"\nnum6="+num6+"\nname="+name+"\na="+a+"\nb="+b);
    }
}

输出结果:

Demo02

public class Demo03 {
    public static void main(String[] args) {
        int i = 10;     //十进制
        int i2 = 010;   //八进制
        int i3 = 0x10;  //十六进制
        int i4 = 0b10;  //二进制
        System.out.println(i);
        System.out.println(i2);
        System.out.println(i3);
        System.out.println(i4);

        //==============================================================
        //浮点数拓展?   银行业务 ↓
        //使用BigDecimal数学工具类
        //==============================================================
        //float     能表示的字长有限,离散(不连续的),存在舍入误差,只能无限接近但不等于
        //double
        //最好避免使用浮点数进行比较
        //最好避免使用浮点数进行比较
        //最好避免使用浮点数进行比较

        System.out.println("==================================");
        float f = 0.1f;
        double d = 1.0 / 10;
        System.out.println(f == d);
        System.out.println(f);
        System.out.println(d);
        System.out.println("==================================");
        float f1 = 23234423685f;
        float f2 = f1 + 1;
        System.out.println(f1 == f2);

        //==================================================================
        //字符拓展
        //==================================================================
        System.out.println("====================================");
        char c1 = 'A';
        char c2 = '中';
        System.out.println(c1);
        System.out.println((int) c1);    //强制转换
        System.out.println(c2);
        System.out.println((int) c2);    //强制转换
        //字符本质是数字   各个国家的文字在统一码 Unicode(万国码)中都有相对应的编码
        //97对应a,65对应A
        char c3 = '\u0061';
        System.out.println(c3);

        /**
         * 转义字符
         * \t   制表符
         * \n   换行
         */
        System.out.println("hello\twolrd");
        System.out.println("hello\nworld");

        System.out.println("========================================");
        String s1 = new String("hello world");
        String s2 = new String("hello world");
        String s3 = "hello world";
        String s4 = "hello world";
        System.out.println(s1 == s2);   //false
        System.out.println(s3 == s4);   //true
        //后面学习内存后解释原因

        //布尔值扩展
        boolean flag = true;
        if (flag==true){}
        if (flag){}         //flag默认为true
        //Less is more!

    }
}

输出结果:

image

四、类型转换

  • 由于Java是强类型语言,所以有些运算需要进行类型转换
低 -------------------------------------------> 高
byte,short,char -> int -> long -> float -> double
  • 运算中,不同类型的数据先转换为同一类型,然后再进行运算。

  • 强制类型转换:

    • 由 高 -----> 低,需要强转       强制类型转换格式:(TYPE)varName
      
  • 自动类型转化:

    • 由 低 -----> 高,自动转换
      

代码:

public class Demo04 {
    public static void main(String[] args) {
        byte b1 = 127;          //低
        int i1 = b1;            //高     byte自动转换为int
        int i2 = 128;           //高
        byte b2 = (byte) i2;    //低     超过byte范围(-128~127),内存溢出
        System.out.println("i=" + i1 + "\nb=" + b1);
        System.out.println("i2=" + i2 + "\nb2=" + b2);
        /**
         * 由 高 -----> 低,需要强转       强制类型转换格式:(TYPE)变量名
         * 由 低 -----> 高,自动转换
         */
        double d = i2;
        System.out.println("d=" + d);

        /*
        注意点:
        1. 不能对布尔值进行转换
        2. 不能把对象类型转换为不相干的类型
        3. 在把高容量转换到低容量的时要强制转换
        4. 转换的时候可能存在内存溢出,或者精度问题
         */

        char c = 'a';
        int s = c + 1;
        System.out.println("s=" + s + "\n" + ((int) c) + "\n" + ((char) s));

    }
}

注意:

public class Demo05 {
    public static void main(String[] args) {
        //操作比较大的数时,注意内存溢出问题
        //JDK7只后新特性:一个数字可以加下划线分割
        int money = 10_0000_0000;
        int years = 20;
        int total = money * years;      //-1474836480   计算时内存溢出了
        long total1 = money * years;    //-1474836480   默认先以int型计算再转换成long型,转换之前就已经内存溢出
        long total2 = money * (long) years; //先转换再计算
        System.out.println(total2);
    }
}

五、变量

  • 变量:可以变化的量

  • Java是一种强类型语言,每个变量都必须声明其类型。

  • Java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域

    • type varName [=value] [{,varName[=value]}];
      //数据类型  变量名 = 值;
      
    • 可以使用逗号隔开来声明多个同类型变量(不建议使用,容易看上去很混乱)
  • 注意事项:

    • 每个变量都有类型,变量可以是基本类型,也可以是引用类型。
    • 变量名必须是合法的标识符。
    • 变量声明是一条完整的语句,因此每一个声明都必须以分号结束
    public class Demo06 {
        public static void main(String[] args) {
    //      int a=1,b=2,c=3;    不建议使用
            int a=1;
            int b=2;
            int c=3;
            String name="晓龙";
            char x='X';
            double pi=3.1415926;
        }
    }
    

1. 变量作用域

  • 类变量
  • 实例变量
  • 局部变量
public class Demo07 {
    //属性:变量

    //类变量   static
    static double salary = 2500;

    //实例变量:从属于对象;   若不手动初始化,为默认值。数值类型默认为 0 或 0.0 ,字符串为u0000,输出依然为0
    //布尔值boolean:默认是false
    //除了基本类型,其余的默认值都为null
    String name;
    int age;

    //main方法
    public static void main(String[] args) {
        //局部变量      必须声明和初始化值
        int i = 10;
        System.out.println(i);

        //实例变量
        //变量类型 变量名字 = new 变量类型()
        Demo07 demo07 = new Demo07();
        System.out.println(demo07.age);
        System.out.println(demo07.name);

        //类变量   static
        System.out.println(salary);
    }

    //其他方法
    public void add() {
        /**
         * System.out.println(i);
         * i是局部变量,在add()方法中无法访问main()方法中的i
         * 局部变量只在声明它的方法、构造方法或者语句块中可见
         */
    }
}

2. 常量

  • 常量(Constant):初始化(initialize)后不能再改变值!不会变动的值。
  • 所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序的运行过程中不允许被改变。
final 常量名 = 值;
final double PI = 3.14;
  • 常量名一般使用大写字符。
public class Demo08 {
    //final,static等修饰符,不存在先后顺序
    static final double PI = 3.14;      //常量使用大写字母和下划线

    public static void main(String[] args) {
        System.out.println(PI);
    }
}

3. 变量的命名规范

  • 所有变量、方法、类名:见名知意
  • 类成员变量:首字母小写和驼峰原则(例:monthSalary)
  • 局部变量:首字母小写和驼峰原则
  • 常量:大写字母和下划线(例:MAX_VALUE)
  • 类名:首字母大写和驼峰原则(例:Man,GoodMan)
  • 方法名:首字母小写和驼峰原则(例:run(),runRun() )

六、运算符

  • Java语言支持如下运算符:

    • 算数运算符:+ , - , * , / , % , ++ , --(加,减,乘,除,模运算[即取余],自增,自减)
    • 赋值运算符:=
    • 关系运算符:> , < , >= , <= , == , !=instanceof
    • 逻辑运算符:&& , || , !
    • 位运算符:& , | , ^ , ~ , >> , << , >>>
    • 条件运算符: ?:
    • 扩展赋值运算符:+= , -= , *= , /=
  • 优先级:

    • 优先级 描述 运算符
      1 括号 () , []
      2 正负号 + , -
      3 自增、自减、非 ++ , -- , !
      4 乘除、取余 * , / , %
      5 加、减 + , -
      6 移位运算 << , >> , >>>
      7 大小关系 > , >= , < , <=
      8 相等关系 == , !=
      9 按位与 &
      10 按位异或 ^
      11 按位或 |
      12 逻辑与 &&
      13 逻辑或 ||
      14 条件运算 ?:
      15 赋值运算 = , += , -= , *= , /= , %=
      16 位赋值运算 &= , |= , ^= , ~= , <<= , >>= , >>>=
package operator;

public class Demo01 {
    public static void main(String[] args) {
        //二元运算符
        int a = 10;
        int b = 20;
        int c = 25;
        int d = 30;
        System.out.println(a + b);
        System.out.println(a - b);
        System.out.println(c * b);
        System.out.println((double) b / d);
        System.out.println(c % a);      //取余,模运算
    }
}
package operator;

public class Demo02 {
    public static void main(String[] args) {
        //++ , --   自增,自减   一元运算符
        int a = 3;
        System.out.println("a=" + a);
        int b = a++;    //a++等同于 a先赋值给b,再自增,a=a+1,a=4
        System.out.println("a=" + a);
        int c = ++a;    //++a等同于a先自增,a=a+1,a=5,再赋值给c

        System.out.println("a=" + a + "\nb=" + b + "\nc=" + c);

        //幂运算   2^3
        double pow = Math.pow(2, 3);
        System.out.println(pow);
    }
}
package operator;

public class Demo03 {
    public static void main(String[] args) {
        long a = 123123123123123L;
        int b = 123;
        short c = 10;
        byte d = 8;

        //有long型自动转换为long型,没有自动转换为int型
        System.out.println(a + b + c + d);  //Long
        System.out.println(b + c + d);      //Int
        System.out.println(c + d);          //Int
    }
}
package operator;

public class Demo04 {
    public static void main(String[] args) {
        //关系运算符返回的结果:正确,错误(布尔值true,false)
        int a = 10;
        int b = 20;
        System.out.println(a > b);
        System.out.println(a < b);
        System.out.println(a == b);
        System.out.println(a != b);
    }
}
package operator;

public class Demo05 {
    public static void main(String[] args) {
        //与(and)    或(or)   非(取反)
        boolean a = true;
        boolean b = false;

        System.out.println("a && b:" + (a && b));   //逻辑与运算:两个变量都为真,结果才为true
        System.out.println("a || b:" + (a || b));   //逻辑或运算:两个变量有一个为真,结果就为true,都为假才为false
        System.out.println("!(a && b):" + !(a && b));   //若为真,则变为假;若为假,则变为真

        //短路运算
        int c = 5;
        boolean d = (c < 4) && (c++ < 4);   //c<4为假,整体就为假,c++没有进行运算
        System.out.println(d);
        System.out.println(c);
    }
}
package operator;

public class Demo06 {
    public static void main(String[] args) {
        /*
        A = 0011 1100
        B = 0000 1101
        --------------------------------
        A&B = 0000 1100
        A|B = 0011 1101
        A^B = 0011 0001
        ~B = 1111 0010

        2*8 = 16    2*2*2*2
        <<
        >>

        0000 0000       0
        0000 0001       1
        0000 0010       2
        0000 0100       4
        0000 1000       8
        0001 0000       16
         */

        System.out.println(2 << 3);
    }
}
package operator;

public class Demo07 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        a += b;     //a=a+b     30
        a -= b;     //a=a-b     10
        System.out.println(a);
        //字符串连接符 +
        System.out.println("" + a + b);     //字符串在前面,不加括号,连接符后是String类型,不进行运算
        System.out.println(a + b + "");     //字符串在后面,前面的+会进行运算
    }
}
package operator;

public class Demo08 {
    //三元运算符
    public static void main(String[] args) {
        //x ? y : z
        //如果x==true,结果为 y,否则为z
        int sorce = 80;
        String r = sorce > 60 ? "及格" : "不及格";
        System.out.println(r);
    }
}

七、包机制

  • 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。

  • 包语句的语法格式:

    • package pkg1[.pkg2[pkg3...]];
      
  • 一般利用公司域名倒置作为包名;

  • 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包。使用“import”语句可完成此功能

    • import package1[.package2...].(classname|*);
      

八、JavaDoc

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

  • 参数信息

    • @author 作者名
    • @version 版本号
    • @since 指明需要最早使用的jdk版本
    • @param 参数名
    • @return 返回值情况
    • @throws 异常抛出情况
package com.forgetcity.base;

/**
 * @author ForgetCity
 * @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;
    }
}

命令行生成Javadoc文档

cmd生成Javadoc文档命令:
javadoc -encoding UTF-8 -charset UTF-8 Doc.java -d 输出路径

image

image

image

IDEA生成Javadoc文档

image

Locale输入zh_CN
Other command line arguments输入-encoding utf-8 -charset utf-8

image

posted @ 2022-04-11 13:20  ForgetCity  阅读(29)  评论(0编辑  收藏  举报