Java基础篇 2021/02/23 持续更新中

一、IDEA创建一个Empty Project

  1. 首先File-> New -> Project

  2. next 后 注意命名与路径
    在这里插入图片描述

  3. 新建模块,module,之后直接和JavaProject类似
    在这里插入图片描述

  4. 设置项目结构(File -> Project Structure)调好自己的版本
    在这里插入图片描述

  5. 最后在Module 里面的 src 中新建 java文件书写即可
    在这里插入图片描述

二、java注释、关键字和标识符

2.1 java 注释(和 C 一样)

java中的注释主要分为三种单行注释,多行注释已经JavaDoc文档注释

public class HelloWorld {
    public static void main(String []args)
    {
        // 这是单行注释
        /*这是是多行注释
        多行注释*/

        /**
         * @Description Hello World
         * @Author LuckyLight
         * 这是javaDoc文档注释
         * javaDoc文档注释
         */
        System.out.print("Hello World");
    }
}

可以在 File -> Settings -> Color Scheme -> java -> comment 修改我们的配色格式

2.2 java 标识符

  1. 关键字
    在这里插入图片描述

  2. 类名称、变量名称、方法的名称也都是被称为标识符

  3. 标识符命名规则,可以有$

    1. 所有的标识符都由字母、下划线、美元符号开始
    2. 首字母后之后可以由字母、下划线、美元符号和数字。
    3. 标识符大小写 敏感。

三、java数据类型

  1. java是一个强类型语言:变量必须先定义后使用。 python也是强类型语言,一个变量不经过强制转换,它永远是这个数据类型,不允许隐式的类型转换。
  2. 弱类型语言, JavaScript, vb等等

3.1 基本数据类型(primitive type)

数据类型 表示 范围
整数类型 byte 1byte, -128~127
整数类型 short 2byte,
整数类型 int 4byte
整数类型 long 8byte, 后缀是L
浮点类型 float 4byte, 后缀是 F
浮点类型 double 8byte
boolean类型 boolean 1bit
字符类型 char 2byte
public class HelloWorld {
    public static void main(String []args)
    {
        byte a = 127;       // 8 bit
        short b = 1024 * 5; // 16 bit
        int c = 0x3f3f3f3f; // 32 bit
        long d = 1203L;     // c ++ 是LL
        char ch = 'a';
        float x = 0.12F;
        double y = 12.241512;
        boolean st = false;
    }
}

3.2 引用数据类型(reference type)

引用数据类型主要包括类、接口和数组。

比如说 String 就是引用数据类型,他是一个类!

四、数据类型扩展与转换(进制、浮点、字符)

4.1 二\八\十\十六进制

含义 前缀
二进制 0b, eg: 0b101010
八进制 0, eg: 07524
十进制 无,
十六进制 0x, eg:0x3f3f3f3f

4.2 浮点数精度 (float, double)

浮点数精度,不能直接判断相等,因为浮点数表示形式为 (由尾数和阶码组成,学过计算机组成原理应该明白),而且还存在舍入误差的情况。 所以出现了一个类BigDecimal,是一个数学工具类

因此,会有一些比较操蛋的情况出现,示例如下

4.3 字符数据(char)

在java中,汉字 居然可以被识别。。。 主要是char为2个字节(2 ^ 16 = 65536)把汉字包括去了。

同时,char 可以按照 ASCII 码强制类型转换为 INT 类型

注意java 的强制类型转化和c++不一样, (int)ch -->这种方法和 c 倒是一样。

下面我们介绍一下char 类型 和 string 类型的 的范围问题,详情查看博客https://www.cnblogs.com/pxb2018/p/10730412.html

1. char

java中的char确实使用2Byte空间,它实际使用的是UCS-2 也就是plane 0只能表述65536个字符,对于超出其范围的其它plane内容,请看下图:

img

一旦你使用了大于UCS-2的字符,那么编译器会直接报错!

其实也就是说char使用的是UTF-16格式。有个建议是尽量别用char类型,因为它会导致一些隐蔽的错误。比如,当你在用String时你定义了一个“虫”,你想当然的认为一个char就能盛放String中的一个字符(毕竟char是字符,而String就是描述的char数组),但是你会发现其实这个String的length()是2而不是1,因为它超出了UCS-2,String用两个char的位置(4字节)来表示了这个char,而String本该用一个char的位置来表示它才对。

2. String

首先,String能够支持的字符与你写代码时选择的编码方式有关,当你选择UTF编码时,你可以随便使用Unicode字符,用没脚”虫“当变量名都随你。使用GB*时,没脚虫”虫“不被支持(GBK收录的少一些吧或者这是日本字吧?)

其次,String在Java中是被定义为char数组来组织的,所以你定义的String最终要被转换成char来存放,但是,不要认为超出char的65536就不能存了,如果超出了它会用2个char来存放

public class HelloWorld {
    public static void main(String []args)
    {
        // 首先我们测试一下进制, 0b, 0, 0x
        System.out.println("进制的测试!!!\n");
        int num2 = 0b1000, num8 = 077, num16 = 0xff;
        System.out.println(num2);
        System.out.println(num8);
        System.out.println(num16);
        System.out.println("----------------");

        // 测试一下浮点数
        float x = 0.1f;
        double y = 1.0 / 10;
        System.out.println(x == y); // float 还是精度小,double 的话就会显示 true

        float x2 = 233428352375878f;
        float y2 = 233428352375878f;
        System.out.println(x2 == y2);   // 这个还是精度舍去了

        // 测试一下 char 的强制类型转化
        char ch = '好';
        System.out.println(ch);
        System.out.println((int)ch);    // int(ch) 会报错,绝了

        char ch2 = (int)97;
        System.out.println(ch2);

        // \U0000~ \UFFFF
        char ch3 = '\u0061';    // 6 * 16 + 1 * 1 = 97,
        System.out.println(ch3);

        // 转移字符, \t, \n, \r.....


        // 更有趣的是,下面这个(需要从对象、内存等的角度进行分析才可以)
        System.out.println("=================================");
        String sa = "123456";
        String sb = "123456";
        String sc = new String("123456");   // 这个 original 不是手打的,而是代码自
        String sd = new String("123456");   // 己填充的,不要自己打
        System.out.println(sa == sb);
        System.out.println(sc == sd);
    }
}

五、类型转换

基本格式:(类型)变量名

注意事项:

  1. 从低到高是可以进行自动转换的。
  2. 从高到低就需要进行强制转换(但是有时候需要注意溢出或者精度!!!问题)
  3. 不能对boolean进行转换。
  4. 有些时候 long的强制类型转换需要提前(算法的时候数字相乘就溢出)
  5. 数字方便的表示方法100_0000_0000L,可以加上辅助的下划线
public class test1 {
    public static void main(String[] args) {
        boolean flag = true;
        // int a = (int)flag;   Error:inconvertible types; cannot cast 'boolean' to 'int'

        System.out.println("======================");
        int x = (int) 1e9;
        int y = 10_0000_0000;   // 注意这个比较舒服的数字方式,下换线会被忽略!!_
        long total = x * y;     // 右侧就会溢出了
        System.out.println(x);
        System.out.println(y);
        System.out.println(total);
        System.out.println((long)x * y);
    }
}

六、变量&常量&命名规范

变量就是可以变化的量,变量的定义形式如下,其中名字必须是合法的标识符(比正常c,c++多了一个美元符号$)

type varName [=value][{, varName[=value]}];

6.1 变量作用域

首先,我们将变量分为类变量(static 修饰的),实例变量(无static修饰的类的成员)和方法变量(类函数方法中的变量)

// 类变量,实例变量,方法变量
public class demo1 {
    // 属性:变量
    // 类变量 static
    static double salary = 2500;


    // 实例变量:从属于对象,不初始化会有默认值
    // 数值默认为 0, 0.0, false, 除了基本类型,(引用数据类型)其他为 null
    String name;
    int age;

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

        // 变量类型 变量名字 = new 类名();
        demo1 d1 = new demo1();
        System.out.println(d1.age);
        System.out.println(d1.name);

        // 输出 类变量salary
        System.out.println(salary); // 无static会报错。。。
                                    // java: 无法从静态上下文中引用非静态 变量
    }

    // 其他方法
}

6.2 常量

  • final 常量名=值;
  • 常量名一般都大写。
  • static final PI = 3.14 等价于 final static PI = 3.14;
    • 原因是 static, final, private, public 都是修饰词,需区分前后

6.3变量&常量命名规范

  • 首先所有变量方法必须见名知意
  • 类成员变量:首字母小写加驼峰原则 lastName
  • 局部变量 :首字母小写加驼峰原则 lastName
  • 方法名 :首字母小写加驼峰原则 lastName
  • 类名 :首字母大写加驼峰原则 LastName
  • 常量 :大写字母加下换线 LAST_NAME

七、运算符(operator) & 优先级

7.1 运算符介绍

ctrl + d 复制当前行到下一行。

  • 算数运算符 +, -, *, /, %, ++, --

  • 赋值运算符 =

  • 关系运算符 >, <, >=, <=, ==, !=, instance of

  • 逻辑运算符 &&, ||, !

  • 位运算符 &, |, ^, ~, >>, <<, >>>(>>>表示的是无符号右移)

  • 条件运算符 ? :

  • 扩展赋值运算符 +=, -=, *=, /=

下面说一些运算奇奇怪怪的东西

  1. 无论是short + byte还是byte + byte还是short + short,相加之后的类型为int, 就是说整数相加之后最少为int

  2. true == 1 是不允许的, boolean类型无法做运算。

  3. if (1) 或者是 if (boolean(1))都不行,和c++有些区别,可能是觉着这个太容易出bug了

  4. a+++++b

幂运算使用Math工具类来运算

  • \(a^b\)=Math.pow(a, b)

逻辑运算符(短路优化),位运算符和条件运算符

package package2;

public class demo1 {
    public static void main(String[] args) {
        int a = 5;

        System.out.println("短路运算(主要是算法优化)" + (a < 5 && (++ a < 5))); // 后面 ++ a 并不会执行
        System.out.println(a);
    }
}

字符串连接符 也是 '+' 

  • 首先 (String)(1)会报错,这点可以理解,但是下面确实挺违反常理的

  • 我们看第六行的,后面数字是直接转为 String 进行相连

  • 第七行则是先进行了数字的相加,然后才作为String进行相连接。

package package2;

public class demo1 {
    public static void main(String[] args) {
        System.out.println("str1" + "str2\n");
        System.out.println("a + b = " + 11 + 22);
        System.out.println(11 + 22 + " = a + b");
    }
}

输出结果为

str1str2

a + b = 1122
33 = a + b

7.2运算符优先级

运算符的优先级见下图1所示

八、包机制、 JavaDoc

  • 包机制是为了更好的组织类,用于区别类名的命名空间,类似于我们的文件夹
  • 定义包机制的语法如下
    • package pkg1[. pkg2[. pkg3...]]
  • 一般利用公司域名倒置作为包名,例如www.baidu.com--> com.baidu.www 注意用来整理包

整理之后的包文件会更舒服一些:

  • 为了使用某一个包中的成员,需要在java程序中导入包,使用import(有点像python),导入包机制的语法如下
    • import package1[.package2 ...].(classname|*), 其中 * 表示倒入全部类
// import javax.xml.crypto.Data;    // 放在上面就报错,必要再package下面
package com.luckylight.package2;    // 必须要写在整个类的最上面,有上面 那句就不行

// import com.luckylight.package1.demo1;   // demo1 会冲突的

import javax.xml.crypto.Data;

public class demo1 {
    public static void main(String[] args) {
        Data a;     //  用它必须要导入一个包。
        demo1 b;
        System.out.println("str1" + "str2\n");
        System.out.println("a + b = " + 11 + 22);
        System.out.println(11 + 22 + " = a + b");
    }
}

九、JavaDoc

  • javadoc命令是用来生成自己的API文档(API=Application Programming Interface)的。
  • 可以是类的注释,也可以是方法的注释
  • 参数信息如下所示:
    • @author 作者名
    • @version 版本号
    • @since 指明需要最早使用的jdk版本
    • @param 参数名
    • @return 返回值情况
    • @throws 异常抛出情况
    • 其中,@author 可以多次使用,以指明多个作者,生成的文档中每个作者之间使用逗号 (,) 隔开。
      @version 也可以使用多次,只有第一次有效

可以通过命令行 java.doc生成文档,也可以通过idea生成

  • 首先open in -> explorer,在cmd中打开,输入

    • javadoc -encoding UTF-8 -charset UTF-8 Doc.java
    • 其中 -encoding UTF-8 -charset UTF-8 部分是参数,防止乱码问题,Doc.java则是 java 的文件
    • 之后再文件夹中找 索引文件 index.html 即可
  • 下面介绍如何通过 idea 集成环境生成java API帮助文档

    • 选择文档,然后 Tools -> Generate JavaDoc

    • 下面的 Locale :语言类型,zh-CN 或者不填

十、最后推荐看一手阿里巴巴开发手册

posted @ 2021-02-25 14:37  lucky_light  阅读(180)  评论(0编辑  收藏  举报