Java基础语法

Java基础语法

1 注释

  • 书写注释是一个非常好的程序编码习惯
  • 注释并不会被执行,是给写代码的人看的
  • 写代码一定要注意规范

IDEA中建立工程的方法:

  1. 创建新工程–>选择Empty Project
  2. 进入工程后,File–>New–>Moudle…–>Java Class
  3. File–>Project Structure…–>Project Settings–>Project–>选择如下选项
    在这里插入图片描述

Java的注释有3种:

  • 单行注释

    // 双斜杠开头,只能注释一行文字
    // 只能注释一行文字
  • 多行注释

    /*
    可以注释多行文字
    可以注释多行文字
    */
    /*
    下面皮一下(狗头)
    */
    
            /*
             *               ii.                                         ;9ABH,          
             *              SA391,                                    .r9GG35&G          
             *              &#ii13Gh;                               i3X31i;:,rB1         
             *              iMs,:,i5895,                         .5G91:,:;:s1:8A         
             *               33::::,,;5G5,                     ,58Si,,:::,sHX;iH1        
             *                Sr.,:;rs13BBX35hh11511h5Shhh5S3GAXS:.,,::,,1AG3i,GG        
             *                .G51S511sr;;iiiishS8G89Shsrrsh59S;.,,,,,..5A85Si,h8        
             *               :SB9s:,............................,,,.,,,SASh53h,1G.       
             *            .r18S;..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,....,,.1H315199,rX,       
             *          ;S89s,..,,,,,,,,,,,,,,,,,,,,,,,....,,.......,,,;r1ShS8,;Xi       
             *        i55s:.........,,,,,,,,,,,,,,,,.,,,......,.....,,....r9&5.:X1       
             *       59;.....,.     .,,,,,,,,,,,...        .............,..:1;.:&s       
             *      s8,..;53S5S3s.   .,,,,,,,.,..      i15S5h1:.........,,,..,,:99       
             *      93.:39s:rSGB@A;  ..,,,,.....    .SG3hhh9G&BGi..,,,,,,,,,,,,.,83      
             *      G5.G8  9#@@@@@X. .,,,,,,.....  iA9,.S&B###@@Mr...,,,,,,,,..,.;Xh     
             *      Gs.X8 S@@@@@@@B:..,,,,,,,,,,. rA1 ,A@@@@@@@@@H:........,,,,,,.iX:    
             *     ;9. ,8A#@@@@@@#5,.,,,,,,,,,... 9A. 8@@@@@@@@@@M;    ....,,,,,,,,S8    
             *     X3    iS8XAHH8s.,,,,,,,,,,...,..58hH@@@@@@@@@Hs       ...,,,,,,,:Gs   
             *    r8,        ,,,...,,,,,,,,,,.....  ,h8XABMMHX3r.          .,,,,,,,.rX:  
             *   :9, .    .:,..,:;;;::,.,,,,,..          .,,.               ..,,,,,,.59  
             *  .Si      ,:.i8HBMMMMMB&5,....                    .            .,,,,,.sMr
             *  SS       :: h@@@@@@@@@@#; .                     ...  .         ..,,,,iM5
             *  91  .    ;:.,1&@@@@@@MXs.                            .          .,,:,:&S
             *  hS ....  .:;,,,i3MMS1;..,..... .  .     ...                     ..,:,.99
             *  ,8; ..... .,:,..,8Ms:;,,,...                                     .,::.83
             *   s&: ....  .sS553B@@HX3s;,.    .,;13h.                            .:::&1
             *    SXr  .  ...;s3G99XA&X88Shss11155hi.                             ,;:h&,
             *     iH8:  . ..   ,;iiii;,::,,,,,.                                 .;irHA  
             *      ,8X5;   .     .......                                       ,;iihS8Gi
             *         1831,                                                 .,;irrrrrs&@
             *           ;5A8r.                                            .:;iiiiirrss1H
             *             :X@H3s.......                                .,:;iii;iiiiirsrh
             *              r#h:;,...,,.. .,,:;;;;;:::,...              .:;;;;;;iiiirrss1
             *             ,M8 ..,....,.....,,::::::,,...         .     .,;;;iiiiiirss11h
             *             8B;.,,,,,,,.,.....          .           ..   .:;;;;iirrsss111h
             *            i@5,:::,,,,,,,,.... .                   . .:::;;;;;irrrss111111
             *            9Bi,:,,,,......                        ..r91;;;;;iirrsss1ss1111
             */
  • 文档注释

    /**
    * @Description  HelloWorld
    * @Author  玉朋
    * @Dete 2020/9/5
    */

2 标识符和关键字

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

通俗理解:程序员自己有权利命名的单词都是标识符。(注意:main是方法名称,是标识符,但这个标识符不能修改,因为是SUN公司固定的。)

标识符命名规则:

  • 标识符应该以字母(A-Z或a-z)开头

  • 标识符不能以数字开头

  • 标识符中不能有空格,例如class Hello World{},应该将写为class HelloWorld{}

  • 关键字不能作为标识符

  • 标识符是大小写敏感的

  • 可以使用中文命名,但不建议使用,也不建议使用汉语拼音

  • 非法标识符举例:name_ name name_ __name name$ $name

标识符命名规范(在《Java开发手册》中有较详细的说明):

  • 见名知意
  • 遵循驼峰命名方式,有利于单词之间进行分割
  • 命名均不能以美元符($)或者下划线(_)开头,也不能以美元符或者下划线结尾

关键字:

在这里插入图片描述(图片转载自网络)

  • abstract 表明类或者成员方法具有抽象属性
  • assert 断言,用来进行程序调试
  • boolean 基本数据类型之一,声明布尔类型的关键字
  • break 提前跳出一个块
  • byte 基本数据类型之一,字节类型
  • case 用在switch语句之中,表示其中的一个分支
  • catch 用在异常处理中,用来捕捉异常
  • char 基本数据类型之一,字符类型
  • class 声明一个类
  • const 保留关键字,没有具体含义
  • continue 回到一个块的开始处
  • default 默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现
  • do 用在do-while循环结构中
  • double 基本数据类型之一,双精度浮点数类型
  • else 用在条件语句中,表明当条件不成立时的分支
  • enum 枚举
  • extends 表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口
  • final 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量
  • finally 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
  • float 基本数据类型之一,单精度浮点数类型
  • for 一种循环结构的引导词
  • goto 保留关键字,没有具体含义
  • if 条件语句的引导词
  • implements 表明一个类实现了给定的接口
  • import 表明要访问指定的类或包
  • instanceof 用来测试一个对象是否是指定类型的实例对象
  • int 基本数据类型之一,整数类型
  • interface 接口
  • long 基本数据类型之一,长整数类型
  • native 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
  • new 用来创建新实例对象
  • package
  • private 一种访问控制方式:私用模式
  • protected 一种访问控制方式:保护模式
  • public 一种访问控制方式:共用模式
  • return 从成员方法中返回数据
  • short 基本数据类型之一,短整数类型
  • static 表明具有静态属性
  • strictfp 用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范
  • super 表明当前对象的父类型的引用或者父类型的构造方法
  • switch 分支语句结构的引导词
  • synchronized 表明一段代码需要同步执行
  • this 指向当前实例对象的引用
  • throw 抛出一个异常
  • throws 声明在当前定义的成员方法中所有需要抛出的异常
  • transient 声明不用序列化的成员域
  • try 尝试一个可能抛出异常的程序块
  • void 声明当前成员方法没有返回值
  • volatile 表明两个或者多个变量必须同步地发生变化
  • while 用在循环结构中

3 数据类型

强类型语言弱类型语言
要求变量的使用严格符合规定,所有变量必须定义后才能使用与强类型语言的特点相反

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

在这里插入图片描述

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

        // 整数
        int num1 = 12; // 最常用的
        byte num2 = 23;
        short num3 = 34;
        long num4 = 232L; // 在long或者Long赋值时,数值后使用大写字母L,不能是小写字母l,小写容易跟数字混淆,造成误解

        // 浮点数
        float num5 = 46.3F;// float类型要在数字后面加F
        double num6 = 3.14159269875382492;

        // 字符
        char name = 'B';
        char country = '国';
        // 字符类型char是一个单一的16位Unicode字符,最小值是\u0000,也就是0,最大值是\uffff,也就是65536,char类型可以存储任何字符
        // 字符串,String不是关键字,是类
        // String names = "中国";

        // boolean 布尔值
        boolean type1 = true;
        boolean type2 = false;
    }
}

引申:

  • 位(bit):是计算机 内部数据 存储的最小单位,11001100是一个八位二进制数
  • 字节(byte):是计算机 数据处理 的基本单位,习惯上用大写字母B表示
  • 1B(字节,byte)= 8bit(位)

数据类型拓展:

  • 整数拓展
public class Demo04 {
    public static void main(String[] args) {
        // 整数拓展

        /*
        进制问题
        二进制 0b
        八进制 0
        十进制
        十六进制 0x   0~9 A~F
         */
        int i1 = 10; // 十进制
        int i2 = 010; // 八进制
        int i3 = 0x10; // 十六进制

        System.out.println(i1);
        System.out.println(i2);
        System.out.println(i3);
    }
}

// 运行结果:
10
8
16
  • 浮点数拓展
public class Demo04 {
    public static void main(String[] args) {
        // 浮点数拓展 银行业务的表示
        // 浮点数能表示的数是有限,离散的,存在舍入误差,接近但不等于,有精度问题
        // 最好避免使用浮点数进行比较,使用BigDecimal数据工具类
        float f = 0.1F; // 0.1
        double d = 0.1; // 0.1
        System.out.println(f==d); // 输出flase

        float f1 = 239875764239871F;
        float f2 = f1 + 1;
        System.out.println(f1==f2); // 输出true
    }
}
  • 字符拓展
public class Demo04 {
    public static void main(String[] args) {
        // 字符拓展
        char c1 = 'A';
        char c2 = '中';
        System.out.println(c1);
        System.out.println((int)c1); // 强制转换,字符的本质还是数字

        System.out.println(c2);
        System.out.println((int) c2); // 强制转换,字符的本质还是数字

        char c3 = '\u0061'; // 0061是十六进制,转换为十进制是97,ascii码的97对应小写字母a
        System.out.println(c3);

        // 转义字符
        System.out.println("Hello\tWorld");  // \t制表符
        System.out.println("Hello\nWorld");  // \n换行
    }
}


// 运行输出:
A
6520013
a
Hello	World
Hello
World
  • 实例对象拓展
// 实例对象拓展,从内存分析
String sa = new String("hello world");
String sb = new String("hello world");
System.out.println(sa==sb);

String sc = "hello world";
String sd = "hello world";
System.out.println(sc==sd);

// 运行输出:
false
true
  • 布尔值拓展
// 布尔值拓展
boolean flag = true;
// if (flag)与if (flag==ture){}是等价的
if (flag){

}

4 类型转换

由于Java是强类型语言,所以运算时不同类型的数据要先转换为同一类型,再进行运算。数值转换(按容量和优先级)由低到高的顺序:byte–>short(char)–>int–>long–>float–>double.

public class Demo05 {
    public static void main(String[] args) {
        int i = 128;
        // 强制转换,高-->低,(类型)变量名
        byte b = (byte) i; // 内存溢出,尽量避免

        // 自动转换,低-->高
        double d = i;

        System.out.println(i);
        System.out.println(b);
        System.out.println(d);
        System.out.println("============");


        System.out.println((int)23.7);  // 舍去小数点后面的数字,不是四舍五入
        System.out.println((int)-45.9F);
        System.out.println("============");


        char c1 = 'a';
        int c2 = c1 + 1;
        System.out.println(c2);
        System.out.println((char)c2);

        /*
        注意:
        1.不能对boolean进行转换
        2.不能转换为不相关的类型
        3.高容量转换为低容量,强制转换
        4.转换时可能存在内存溢出和精度问题
         */
    }
}

//运行输出:
128
-128
128.0
============
23
-45
============
98
b

溢出问题:

注意比较以下两种转换方式,一种是先转换,一种是最后转换计算结果;先转换的结果是正确的,最后转换的结果是错误的,因为最后转换的话,计算结果已经是错的了,只不过是将错误的计算结果转换成long类型。

public class Demo06 {
    public static void main(String[] args) {
        int money = 10_0000_0000; //JDK7新特性,数字之间可以用下划线隔开
        int years = 20;
        long total = money*(long)years;
        System.out.println(total);
    }
}

// 运行结果:
20000000000
public class Demo06 {
    public static void main(String[] args) {
        int money = 10_0000_0000; //JDK7新特性,数字之间可以用下划线隔开
        int years = 20;
        int total = money*years;
        System.out.println((long) total);
    }
}

// 运行结果:
-1474836480

数据类型转换需要遵循的原则:

  • 8种基本数据类型中,除boolean类型,其他类型之间都可以进行转换
  • 如果整数型字面量没有超出byte, short,char的取值范围,可以直接将其赋值给byte, short,char类型的变量
  • 大容量转换成小容量,称为强制类型转换,编写时必须添加“强制类型转换符,但运行时可能出现精度损失,谨慎使用
  • byte, short,char类型混合运算时,先各自转换成int类型,再做运算
  • 多种数据类型混合运算,各自先转换成容量最大的那一种,再做运算

5 变量、常量、作用域

5.1 变量

  • 变量(Varible)是可以变化的量

  • Java是强类型语言,每个变量使用之前都必须声明其类型

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

    type varName = value;
    // 数据类型 变量名 = 值;
    // 可以使用逗号隔开来声明多个同类型变量,但不建议这样使用
  • 注意:

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

    • 静态变量(类变量),存储在方法区

    • 实例变量,存储在堆内存

    • 局部变量,存储在栈内存

      public class Varible{
          static int allClick = 0; // 类变量,也称为静态变量
          String str = "hello world"; // 实例变量,也称为成员变量
          
          public void method() {
              int i = 0; // 局部变量
          }
      }
      public class Demo08 {
          // 属性;方法
      
          //类变量
          static double salary = 3000;
          //实例变量:从属于对象
          String name;
          int age;
      
          // main方法
          public static void main(String[] args) {
              //局部变量:使用之前必须声明和初始化
              //如果不自行初始化:数值类型默认或0或0.0,boolean默认为false,其余类型默认为null
              int i = 10;
              System.out.println(i);
      
              Demo08 demo08 = new Demo08(); // 实例化一个类
              System.out.println(demo08.name);
              System.out.println(demo08.age);
      
              System.out.println(salary);
          }
      
          //其他方法
          public void add() {
      
          }
      }
      
      //运行输出:
      10
      null
      0
      3000
  • 变量的命名规范

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

5.2 常量

  • 常量(Constant):初始化后不能再改变的值

  • 常量可以理解为一种特殊变量,即它的值被设定后,在程序运行过程中不允许被改变。

    // final 常量名 = 值;
     static final double PI = 3.14;
  • 常量名一般使用***大写字母***。

6 运算符

Java语言支持以下运算符:

  • 算术运算符:+,-,*,/,%,++,–
  • 赋值运算符:=
  • 关系运算符:>,<,>=,<=,==,!=,instanceof
  • 逻辑运算符:&&,‖,!
  • 位运算符:&,|,^,~,>>,<<
  • 条件运算符 ?:
  • 扩展赋值运算符:+=,-=,*=,/=

算术运算符Demo:

package operator;

public class Demo01 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 35;
        int d = 50;

        System.out.println(a+b);
        System.out.println(a-b);
        System.out.println(c*d);
        System.out.println(c/(double)d);
        System.out.println(c%b);
        
        // 幂运算,借助数学工具类Math
        double pow = Math.pow(2, 3);
        System.out.println(pow);
    }
}

// 运行结果:
30
-10
1750
0.7
15
8.0
package operator;

public class Demo02 {
    public static void main(String[] args) {
        long a = 298642387462035L;
        int b = 287;
        short c = 19;
        byte d = 6;

        System.out.println(a+b+c+d); // 相加的数中有Long类型,结果为Long类型;double类型同理
        System.out.println(b+c+d); // 结果为Int类型
        System.out.println(c+d); // 强转(c+d)为String类型,通过报错信息可以看出结果确实是Int
    }
}

// 运行结果:
298642387462347
312
25

自增自减运算符Demo:

package operator;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

public class Demo04 {
    public static void main(String[] args) {
        // 自增自减运算符是一元运算符
        int a = 3;
        System.out.println(a);

        int b = a++;
        System.out.println(b);
        System.out.println(a);

        int c = ++a;
        System.out.println(c);
        System.out.println(a);

    }
}

// 运行结果:
3 // a的初始值为3
3 // a的值先给b,所以b为3
4 // a的值再自增1,所以a为4
5 // a的值先增1,赋值给c,所以c为5
5 // a的值增1后为5

关系运算符Demo:

package operator;

public class Demo03 {
    public static void main(String[] args) {
        //关系运算符返回的结果只有两种:正确或者错误,用boolean类型表示
        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);
    }
}

// 运行结果:
false
true
false
true

逻辑运算符Demo:

package operator;

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

        System.out.println("a && b: "+(a&&b)); // 逻辑与运算
        System.out.println("a || b: "+(a||b)); // 逻辑或运算
        System.out.println("!(a && b): "+!(a&&b)); // 逻辑非运算

        // 短路运算
        // b已经为假,后面的a不运算,结果直接为假
        System.out.println("b && a: "+(b&&a));
    }
}


// 运行结果:
a && b: false
a || b: true
!(a && b): true
b && a: false

位运算符Demo:

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 = 2*2*2*2
        使用左移右移,与底层运算有关,效率高
        << 等价于×2
        >> 等价于÷2
         */
        System.out.println(2<<3);
    }
}

// 运行结果:
16

扩展赋值运算符Demo:

package operator;

public class Demo07 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        a+=b; //等价于a = a + b
        a-=b; //等价于a = a - b
        System.out.println(a);

        // 字符串连接符
        System.out.println(a + b);
        System.out.println("" + a + b); // 与字符串相连,后面的数字也是相连,不是相加计算
        System.out.println(a + b + ""); // 字符串在后面,前边的计算不变
    }
}


// 运行结果:
10
30
1020
30

三元运算符Demo:

package operator;

public class Demo08 {
    public static void main(String[] args) {
        // 三元运算符
        // x ? y : z
        // 如果x==true,则结果为y,否则结果为z

        int score = 80;
        String type = score < 60 ? "不及格":"及格"; // 开发中常见,应该掌握
        System.out.println(type);
    }
}
// 运行结果:
及格

7 包机制

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

  • 包语句的语法格式为:

    package pkg1[. pkg2[.pkg3...]]
  • 一般使用公司域名倒置作为包名,比如:com.baidu.www

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

    import package1[.package2...].(classname|*...);
    package com.yupeng.operator;
    
    import com.yupeng.base.Demo01;
    import com.yupeng.base.*; // *是通配符,导入这个包下所有的类
    
    public class Demo08 {
        public static void main(String[] args) {
            // 三元运算符
            // x ? y : z
            // 如果x==true,则结果为y,否则结果为y
    
            int score = 80;
            String type = score < 60 ? "不及格":"及格"; // 开发中常见,应该掌握
            System.out.println(type);
        }

8 JavaDoc

  • JavaDoc命令是用来生成自己API文档的。在线JDK帮助文档:https://docs.oracle.com/javase/8/docs/api/?xd_co_f=a67d6dbf-b973-4ec1-873c-9ecd1caf6439

  • 参数信息

    • @author 作者名

    • @version 版本号

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

    • @param 参数名

    • @return 返回值情况

    • @throws 异常抛出情况

      package com.yupeng.base;
      
      /**
       * @author yupeng
       * @version 1.0
       * @since 1.8
       */
      
      public class Doc {
          String name;
      
          /**
           * @author yupeng
           * @param name
           * @return name
           * @throws Exception
           */
          public String test(String name) throws Exception{
              return name;
          }
      	
          // 通过命令行生成Doc,javadooc 参数 文件名
          /*
          通过IDEA生成Doc文件:
          1.新建一个文件夹用于存放Doc文件;
          2.IDEA-->Tools-->Generate JavaDoc...;
          3.Output Directory 选择第1步建立的文件夹;
          4.Locael 填入zh_CN,代表中文;
          5.Other command line arguments 填入-encoding utf-8 -charset utf-8;
          6.点击OK生成。
           */
      }

本文内容总结自B站视频:[狂神说Java]Java零基础学习视频通俗易懂
视频链接
up主:遇见狂神说

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值