• 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("进制的测试!!!
    ");
            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);
    
            // 转移字符, 	, 
    , 
    .....
    
    
            // 更有趣的是,下面这个(需要从对象、内存等的角度进行分析才可以)
            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
    ");
            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
    ");
            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 或者不填

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

  • 相关阅读:
    windows上npm yarn.ps1,因为在此系统上禁止运行脚本
    windows批量启动服务
    Typora极简教程
    Markdown修改字体颜色
    markdown锚点
    R语言报错long vectors not supported yet qap_encode.c 36
    MAC OS 解决R语言locale问题
    Java调用R语言
    MQL4编程—值传递和引用传递
    二分法查找
  • 原文地址:https://www.cnblogs.com/lucky-light/p/14446821.html
Copyright © 2020-2023  润新知