Java编程之路——学习笔记(三)

基础语法学习

在开始学习Java基础语法之前,为了方便后续的学习及代码的管理,创建一个新的项目(空项目/新文件夹)十分有必要


创建空项目

  1. 由于在上文中,已经创建了一个Project项目。因而打开IDEA,不会让我们重新再创建一个项目,而是直接打开上次创建好的项目里,因此我们要关闭当前的项目,回到原始开始界面中创建一个空项目。点击【File】 — 【Close Project】便可以关闭当前项目了
    Java编程之路——学习笔记(三)_第1张图片

  2. 可以在退出的界面中看到之前创建的项目“java_code”,而现在要重新创建一个新项目,点击【New Project】
    Java编程之路——学习笔记(三)_第2张图片

  3. 选择左边一栏最下面的【Empty Project】,然后点击【Next】,便可以创建一个属于我们自己的项目
    Java编程之路——学习笔记(三)_第3张图片

  4. 在【Project name】给空项目命名为“JavaSE”,在【Project location】选择项目安放的位置,创建空项目的实质其实就是创建一个新的文件夹存放代码的地方
    Java编程之路——学习笔记(三)_第4张图片

  5. 进入到JavaSE项目之后,需要重新创建一个Module,并且配置Java环境,点击【File】—【New】— 【Module】
    Java编程之路——学习笔记(三)_第5张图片

  6. 在【Module】模块中,选择创建Java,Module SDK会自动配置好当前的Java版本,直接点击【Next】,进入下一步
    Java编程之路——学习笔记(三)_第6张图片

  7. 给新的Module模块命名和选择Module模块的文件路径,其本质就是在JavaSE文件夹中创建新的二级文件夹,本人给Module模块命名为“基础语法”,点击右下角的【Finish】便完成了New Module的创建
    Java编程之路——学习笔记(三)_第7张图片

  8. 接下来,就是开始给基础语法Module模块配置好Java环境了,若是没有设置好,在该Module下是无法运行.java文件的。点击【File】— 【Project Structure】去设置好Java环境
    Java编程之路——学习笔记(三)_第8张图片

  9. 打开【Project Structure】,左边目录选择【Project Settings】— 【Project】。如下图所示,一开始Project SDK会出现爆红的现象,显示无法找到当前电脑的Java版本,因此我们需要手动去选择好“1.8 version 1.8.0_231”的Java版本
    Java编程之路——学习笔记(三)_第9张图片

  10. 在【Project language level】Java语言版本中,我们选择8,因为该版本的语法比较稳定,适合初学者的学习。最后点击右下角的【Apply】就完成了。到这里,创建一个属于自己的项目以及给空项目配置好Java环境都已经设置完毕。接下来就可以开始我们的学习之旅啦
    Java编程之路——学习笔记(三)_第10张图片


注释

  • 平时编写代码时,若是代码量小的话,还可以自己看懂,但若是项目结构一旦复杂起来,就需要进行注释了
  • 注释并不会被执行,是帮助我们了解代码的结构组成
  • 书写注释是一个非常好的习惯
  • 平时写代码一定要注意书写规范

代码注释:

  • 单行注释
  • 多行注释
  • 文档注释

代码注释的输入语法具体如下表所示:

注释类型 输入语法
单行注释 // ...后面输入的内容就是单行注释文本
多行注释 /* ... */中间输入的内容就是多行注释文本
文档注释 /** ... */中间输入的内容就是文档注释文本

Java程序代码演示“注释语句”如图所示:
Java编程之路——学习笔记(三)_第11张图片


此外,还可以对注释的文本进行个性化设置,具体在【File】— 【Settings】中,找到编辑器【Editor】下级的【Code Scheme】(代码格式)选择【Java】,右边目录中就可以对代码各种语法进行个性化的设置
Java编程之路——学习笔记(三)_第12张图片

其中,Comments就是表示注释,其中Comments下面就有三种类型,分别为Block comment*#单行注释#、JavaDoc#文档注释#、 Line comment,点击想要修改的注释类型,在最右边便可以进行更改颜色、大小、粗斜体等等
Java编程之路——学习笔记(三)_第13张图片


标识符和关键字

  • 关键词:随着学习的深入,接触到关键词会越来越多,并且能读懂它背后的含义。现阶段接触到的关键词就有:class 、public、 void、static

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

标识符注意事项:

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

  2. 首字符之后可以是字母(A-Z或者a-z)、美元符号($)、下划线(_)或者数字的任何字符组成

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

  4. 标识符是大小写敏感

  5. 合法标识符举例有:age、$salary、_value、 _1_value

  6. 非法标识符举例有:123abc、-salary、#abc

  7. 可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音,不太符合规范

    public class keyword {
           
        public static void main(String[] args){
           
            String 王者荣耀 = "最强王者";
            System.out.print(王者荣耀);
        }
    }
    

数据类型

  • ***强类型语言:***(安全性高,但速度较慢)

    要求变量的使用要严格符合规定,所有变量多必须先定义后才能使用

  • 弱类型语言:

    要求变量的使用符合规定

  • Java的数据类型分为两大类

    • 基本类型(primitive type)
    • 引用类型(reference type)

基本类型

  1. 整数型
    1. byte占1个字节范围:-128 ~ 127
    2. short占2个字节范围:-32768 ~ 32767
    3. int占4个字节范围:-2147483648 ~ 214783647 # 最常用
    4. long占8个字节范围:-922337203654775808 ~ 9223372036854775807
  2. 浮点类型:
    1. float占4个字节
    2. double占8个字节 # 最常用
  3. 字符类型:char占2个字节
  4. boolean类型:占1位其值只有true和false

Java实例代码如下所示:

public class datatype{
     
    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.1415926; 
        
        //字符类型,只有2个字节 = 一个中文汉字
        char name = '我';
        
        //字符串类型,String不是关键词,而是一个类
        //String parh = "我是大帅哥";
        
        //布尔值:是非
        boolean flag = true;
        boolean flag = false;
         
    }
}

引用数据类型

  1. 接口
  2. 数组

什么是字节

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

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

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

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

  • 1bit表示1位

  • 1Byte表示一个字节,1B = 8bit

  • 1024B = 1KB

  • 1024KB = 1M

  • 1024M = 1G

数据类型扩展

关于整数类型与浮点数类型进行了相关的扩展,代码如下所示:

public class datatype{
     
    public static void main(String[] args){
     
        //整数扩展:二进制0b、八进制0、十进制、十六进制0x
        int x1 = 10;
        int x2 = 010;  //输出8
        int x3 = 0x10; //输出16
        
        System.out.println(x1);
        System.out.println(x2);
        System.out.println(x3);
        
        //================================= 分割线
        //浮点数扩展:银行业务数字如何表示?
        //float 描述为:有限的、离散的、接近但不等于、舍入误差
        //最好完全避免使用浮点数进行比较!
        //BigDecimal 数学工具类可以进行数值的比较,后续了解
        float y1 = 0.1f;
        float y2 = 1.0/10;
        
        System.out.println(y1==y2);//'=='表示两个变量是否相等的判断语句,输出为false
        System.out.println(y1);
        System.out.println(y2);
        
        float y3 = 13141516f;
        float y4 = y3 + 1;
        
        System.out.println(y3==y4);//输出为true
        
        //================================= 分割线
        //字符串扩展
        char c1 = 'a';
        char c2 = '我';
        
        System.out.println(c1);
        System.out.println(c2);
        //字符强制转换为数值,所有字符的本质都是数字
        System.out.println((int)c1);
        System.out.println((int)c2);
        //字符本质涉及到编码Unicode,表示范围为:U0000~UFFFF
        char c3 = '\u0061';
        System.out.println(c3);//输出为a
        
        //转义字符
        // \t 制表符; \n 换行; 
        System.out.println("Hello,\n World!");
        
        //布尔值扩展
        boolean flag = true;
        //以下两行代码都是一样的
        if (flag==true){
     }; //新手小白的编写习惯
        if (flag){
     }; //大佬的编写习惯
    }
}

类型转换

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

类型转换的方式:

  1. 强制类型转换
  2. 自动类型转换

"类型转换"实例代码如下所示:

public class datatypechange{
     
    public static void main(String[] args){
     
        int i1 = 128;
        //强制转换:从高到低的类型转换时,输入语法为(类型名)变量名
        byte b = (byte)i1; //会出现内存溢出的情况,输出结果为-128
        
        System.out.println(i1);//128
        System.out.println(b);//-128
        
        //自动转化:当低到高的类型转换时,不需要加任何东西
        int i2 = 128;
        double d = a;
        
        System.out.println(i2);//128
        System.out.println(d);//128.0
        
        /*注意点:
        1. 不能对布尔值进行转换
        2. 不能把对象类型转换为不相干的类型
        3. 在把高容量转化为低容量的时候,强制类型转换可能存在内存溢出与精度问题
        */
        
        System.out.println((int)23.7);//输出结果为23
        System.out.println((int)-45.89f);//输出结果为-45
        
        //字符转换
        char c = 'a';
        int i3 = c + 1;
        
        System.out.println(i3);//输出结果为98
        System.out.println((char)i3); //输出结果为b
        
        //操作比较大数值的时候,注意内存溢出问题
        //JDK7新特性:数字之间可以用下划线进行分割
        int money = 1000000000;
        int money2 = 10_0000_0000;
        int years = 20;
        int total1 = money2 * years;//输出结果为-1474836480,计算的时候溢出了
        System.out.println(total1);
        long total2 = money2 * years;//计算出的结果已经是int类型,再转换为long类型已经为时已晚
        System.out.println(total2);
        //如何解决?
        long total3 = money2 * ((long)years);//先把一个数转换为long类型
        System.out.println(total3);
       
    }
}

变量、常量、作用域

变量:

  • 就是可以变化的量
  • Java是一种强类型语言,因此每个变量都必须声明其类型
  • Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域

如何定义变量:

type verName [=value] [{
     ,verName[=value]}];
//数据类型 变量名 = 值;可以使用逗号隔开来表明多个同类型变量(但是不推荐这样写)

注意事项:

  • 每个变量都有类型,类型可以是基本类型,也可以是引用类型
  • 变量名必须是合法的标识符
  • 变量声明是一条完整的语句,因此每一个声明必须以分号结束

“变量定义”代码讲解实例:

public class Demo{
     
    public static void main(String[], args){
     
        // 定义变量
        int a,b,c; //不可读性,不推荐这样做
        int a = 1, b = 2, c = 3; //不推荐
        String name ="Szx"; //引用类型
        char x = 'X';
        double pi = 3.14;
    }
}

变量作用域:

  • 类变量
  • 实例变量
  • 局部变量

"变量作用域——类变量/实例变量/局部变量"代码实例:

public class Variable{
     
    static int allClicks = 0; //类变量
    String str = "hello world"; //实例变量
    
    public void method(){
     
        int i = 0; //局部变量
    }
}

“变量作用域”代码讲解:

public class Demo{
     
    // 作用域
    
    //属性:理解为变量
    
    //类变量
    static double salary = 2500;
    
    /*实例变量:
    从属于对象:从属于Demo类;
    如果不进行初始化,这个数值类型的默认值为0或0.0,字符为null
    布尔值默认为false,除了基本基本类型,其余默认值都是null*/  
    String name;
    int age; 
    
    //main方法
    public static void main(String[], args){
     
        //局部变量:生命周期在main方法里面,出去即死亡;必须声明和初始化值
        int i;
        System.out.println(i); //i没有赋值,无法运行
        
        //实例变量要在main方法里头进行应用,需要输入new Demo
        //变量类型 变量名字 = new Demo();
        Demo demo = new Demo();
        System.out.println(demo.age);
        
        //类变量 static 
        System.out.println(salary); //可直接运行
        
    }
    
    //其他方法
    public void add{
     
        System.out.println(i); //i变量在main方法内存活,出来是无法运行的
    }
}

常量(Constant):

  • 初始化(initialize)后不能再改变值!不会变动的值
  • 所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变
final 常量名 =;
final static double PI = 3.14;
static final double PI = 3.14;
/*在类变量定义之后,可以在局部变量中直接引用
修饰符final,static不存在先后顺序*/
  • 常量名一般使用大写字符

变量的命名规范

  • 所有变量、方法、类名:见名知意
  • 类名:首字母大写和驼峰原则:Man,GoodMan
  • 类成员变量:首字母小写和驼峰原则:monthSalary,除了第一个单词以外,后面的单词首字母大写
  • 局部变量:首字母小写和驼峰原则
  • 常量:大写字母和下划线:MAX_VALUE
  • 方法名:首字母小写和驼峰原则:run(); runRun()

基本运算符

Java语言支持如下运算符:

  • 算术运算符:+、-、*、/、%、++、–
  • 赋值运算符:=
  • 关系运算符:>、<、>=、<=、==、instanceof
  • 逻辑运算符:&&、||、!
  • 位运算符:&、|、^、~、>>、<<、>>>(了解!!)
  • 条件运算符:?、:
  • 扩展赋值运算符:+=、-=、*=、/=
  • 优先级:()括号里头最为优先

包机制(package):

创建一个包机制(package),其实质就是创建一个文件夹,便于管理代码文件(后续还会更深入的展开,这里先提一下)

具体操作如图所示:

  1. 点击【src】文件夹,然后右键鼠标选择【New】— 【Package】即可创建一个包(新的文件夹)
    Java编程之路——学习笔记(三)_第14张图片

  2. 给package命名为base(基础),或是operator(运算)
    在这里插入图片描述

  3. 将所要整理的文件,拖到base文件夹中,就实现了整理打包的管理操作
    Java编程之路——学习笔记(三)_第15张图片


  • ”基本运算符“代码讲解:
package operator;

public class OperatorRun {
     
    public static void main(String[] args) {
     
        // 二元运算符
        //快捷键:Ctrl+D:复制当行到下一行
        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);//输出结果为0,内存溢出
        System.out.println(a/(double)b);

        long c = 123123123123123L;
        int d = 123123;
        short e = 10;
        byte f = 5;

        System.out.println(c+d+e+f);//当运算数据类型中有long,输出结果就为long
        System.out.println(d+e+f);//其余都是int
        System.out.println(e+f);//int

        //取余,模运算
        int g = 22;
        int h = 10;
        System.out.println(g%h);// 22/10=2...2

        
        //=================================
        //关系运算符返回的结果:正确、错误--布尔值
        //关系运算符常与if语句结合使用
        int i1 = 10;
        int i2 = 20;
        System.out.println(a>b);//false
        System.out.println(a<b);//true
        System.out.println(a==b);//false
        System.out.println(a!=b);//true
    }
}

  • ”自增自减运算符、初识Math类“代码讲解:
package operator;

public class OperatorRun {
     
    public static void main(String[] args) {
     
        //一元运算,自增自减运算符 ++ --
        int a = 3;
        int b = a++;//执行完这行代码后,先给b赋值,再自增
        // a = a + 1;
        System.out.println(a);
        // a = a + 1;

        // a = a + 1;
        // a = a + 1;
        int c = ++a;//执行完这行代码前,先自增,再给c赋值

        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);
    }

}

  • ”逻辑运算符“代码讲解:
package operator;

public class OperatorRun {
     
    public static void main(String[] args) {
     
        //逻辑运算符:与&&(and)、或||(or)、非/取反!(not)
        boolean a = true;
        boolean b = false;

        System.out.println("a && b:"+(a&&b)); //逻辑与运算:两个变量都为真,结果才为真
        // false
        System.out.println("a || b:"+(a||b)); //逻辑或运算:只要一个变量为真,结果就为真
        // true
        System.out.println("!(a||b):"+!(a||b)); //逻辑非运算,如果是真,则为假;反之相反
        // false

        //=======================
        //短路运算,若是第一个变量为假,在逻辑与运算中,后面变量即使为真,也不会被运行,结果输出为假
        int c = 5;
        boolean d = (c<4)&&(c++>4);
        System.out.println(d);
        System.out.println(c);//输出还是5,没有执行c++=6

    }

}

  • ”位运算符“代码讲解:
package operator;

public class OperatorRun {
     
    public static void main(String[] args) {
     
        //位运算符:二进制的运算规则

        /*
        A = 0011 1100
        B = 0000 1101
        ---------------
        A&B = 0000 1100 对应位都是1,输出为1(与)
        A|B = 0011 1101 对应位都是0,输出为0,否则为1(或)
        A^B = 0011 0001 对应两个位置都相同,输出为0;不相同输出为1(取反)
        ~B = 1111 0010 1反过来为0;0反过来为1(取反)
        ---------------
        2*8=16 => 2*2*2*2
        效率极高
        << 左移  *2
        >> 右移  /2

        背后的二进制运算机制:
        0000 0000 = 0
        0000 0001 = 1
        0000 0010 = 2 逢2进1
        0000 0011 = 3
        0000 0100 = 4
        0000 1000 = 8
        0001 0000 = 16
        */
        // 二进制运算
        System.out.println(2<<3);

    }
}

  • 扩展赋值运算符及条件运算符(三元运算符)代码讲解:
package operator;

public class OperatorRun {
     
    public static void main(String[] args) {
     
        // 扩展赋值运算符
        int a = 10;
        int b = 20;

        a += b; // a = a + b
        System.out.println(a);
        a -= b; // a = a - b
        System.out.println(a);
        a *= b; // a = a * b
        System.out.println(a);
        a /= b; // a = a / b

        // 字符串连接符:+运算符两侧若是出现了字符串String类型,则出现”“后边都转换为string进行连接
        System.out.println(a+b);
        System.out.println(""+a+b);//输出结果为1020,10与20转换成字符串进行连接
        System.out.println(a+b+"");//与上边是有区别的,输出结果为30

        // 三元运算符(条件运算符)
        // x ? y : z
        // 如果x==true,则结果为y,否则为z
        int score = 80;
        String type = score < 60 ? "不及格" : "及格";//必须掌握
        // if控制流的简写版本
        System.out.println(type);

    }
}

包机制

为了更好地组织类,Java提供了包机制(其实质就是再创建一个文件夹,防止文件命名重复的问题),用于区别类名的命名空间

包语句的语法格式为:

package pkg1[.pkg2[.pkg3...]]

一般利用公司域名倒置作为包名;

例如:www.baidu.com => com.baidu.www


下面演示如何创建二三子级包:

  1. 创建一个包,在IDEA中《.src》文件下面进行创建,右键点击《.src》 — 【New】—【Package】,命名为“com.baidu.www”,不过如图所示,并没有生成子级包
    在这里插入图片描述

  2. 如何解决?点击左边项目结构右上方的小齿轮,取消勾选【compact middle packlages】选项
    Java编程之路——学习笔记(三)_第16张图片

  3. 此时再建立一个com.baidu.www包,就会显示为com包下baidu包,baidu包下www
    Java编程之路——学习笔记(三)_第17张图片

  4. 在www包中创建java文件,会在文件开头显示package com.baidu.www;注意不能删除!


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

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

例如:在类中使用Date函数,就需要在类外导入相应的功能类

package com.baidu.www;

import java.util.Date;//引用语句只能在class外,在包机制下方,不能跑到包机制的上方
import com.baidu.base.Demo01;//表示引用com.baidu.base包下的Demo01类
import com.baidu.base.*;//表示导入这个包下所有的类

public class Demo01{
     
    Date;
}

推荐查看《阿里巴巴Java开发手册》,里面列举了很多编程规范、异常日志、安全规约、工程结构等相关内容

JavaDoc生成文档

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

  • 参数信息

    • @author 作者名
    • @version 版本号
    • @since 指明需要最早使用的jdk版本
    • @param 参数名
    • @return 返回值情况
    • @ throws 异常抛出情况
  • 首先查找官方的API帮助文档[Java SE 文档 — API 和文档 | Oracle 中国],在页面内选择【核心API文档】的【8】版本,进入到JDK的帮助文档[Overview (Java Platform SE 8 ) (oracle.com)]

  • 这里提供一下中文版的API[Java 8 中文版 - 在线API中文手册 - 码工具 (matools.com)]

下面实例演示如何生成自己的帮助文档:

  1. 在java源代码文件中输入文档注释——类注释与方法注释
package com.baidu.www;
//通过命令行 【javadoc 参数 java文件】 生成帮助文档
//类的文档注释
/**
 * @author Szx
 * @version 1.0
 * @since 1.8
 */
public class JavaDoc {
     
    String name;
    //方法的文档注释
    /**
     * @author Szx
     * @param name
     * @return
     * @throws Exception
     */
    public String test(String name) throws Exception{
     
        return name;
    }

}
  1. 右键点击JavaDoc.java文件,选择【Open In】 — 【File Path】,然后再选择【JavaDoc.java】文件,便可以打开文件所在位置
    Java编程之路——学习笔记(三)_第18张图片
    Java编程之路——学习笔记(三)_第19张图片
    Java编程之路——学习笔记(三)_第20张图片

  2. 在文件路径栏上,在开头输入cmd + 空格 + 回车键 ,召唤出命令行窗口,并在命令行输入javadoc -encoding UTF-8 -charset UTF-8 JavaDOc.java其中,encoding和charset参数设置为UTF-8是为了防止文件中的中文运行之后出现乱码的问题,从下图可以看出,虽然运行成功,但是同时也发出了3个警告
    Java编程之路——学习笔记(三)_第21张图片

  3. 运行成功之后,返回文件夹,可以发现文件夹生成了很多其他文件,找到与《JavaDoc.java》同名的HTML文件,打开便可看到自己生成帮助文档
    Java编程之路——学习笔记(三)_第22张图片
    Java编程之路——学习笔记(三)_第23张图片

作业:学会查找使用IDEA生成JavaDoc文档,不会的”面向百度编程“

你可能感兴趣的:(Java基础,java)