Java基础

JAVA基础

一、注释、标识符、关键字

Java基础01:注释

1、为什么会用注释:对于初学者而言,我们编写的代码,代码量比较少,我们或者他人还是很容易看懂并理解;但是我们所需要构建的项目过于复杂时,我们就需要用到注释了。

2、书写注释的必要性与好处:正所谓“咱们不会去做无用功”,而写注释也是一样;我们要有一个良好的书写注释的习惯,不仅有利于自己看懂自己的代码;而且不管是在生活中还是以后的工作中也有利于别人读懂你的代码。

3、注释不会影响你的代码,而且也不会被执行;写的注释是给人看的。

4、Java中的三种注释:

  • 单行注释: //这是单行注释(只能注释一行文字)
  • 多行注释: /**/这是多行注释(可以注释一段文字)
  • 文档注释:/** */这是文档注释

在这里给大家推荐看一下一些有趣的注释,这里直接看大佬原创文章:撒花膜拜

Java基础02:标识符、关键字

  • 关键字:对Java的编译器有特殊的意义,用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数

:上图的单词不认识且不知道怎么用没关系哦,以上关键字在后面的学习中,都会认识并且知道怎么用的】

  • 标识符:Java所有的组成部分都需要名字。类名、变量名以及方法都被称为标识符。
  • 标识符注意点:
    • 所有的标识符都应该以字母(A-Z或者a-z),美元符($),或者下划线()开始。
      首字符之后可以是字母(A-Z或者a-z),美元符($),或者下划线(
      )或数字的任何字符组合。

      不能使用关键字作为变量名或方法名。
      标识符是大小写敏感的。
      合法标识符举例:age,$salary,_value,__1_value
      非法标识符举例:123abc,-salary,#abc
      可以使用中文命名,但是一般不建议使用;也不建议用拼音,看上去很Low。

看图加深理解:

二、数据类型

Java基础03:

  • 强类型语言

    • 要求变量的使用严格符合规定,所有的变量必须先定义后才能使用;安全性高,速度低;
  • 弱类型语言

    • 变量的使用可以不严格符合规定,所有的变量不一定要先定义后才能使用;安全性较低,速度快;

Java的数据类型分为两大类

  • 基本类型(Primitive type)
  • 引用类型(Reference type)

  • 什么是字节?

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

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

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

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

      1bit表示1位;
      
      1 byte (字节)= 8 bit(位);
      
       1 KB = 1024 B(字节);
      
       1 MB = 1024 KB;   (2^10 B);
      
       1 GB = 1024 MB;  (2^20 B);
      
       1 TB = 1024 GB;   (2^30 B);
      

      Java基础04:数据类型扩展

      public class Demo03 {
          public static void main(String[] args) {
              //整数拓展      进制     二进制0b   十进制   八进制0   十六进制0x
              int i=0b10;//二进制0b
              int i1=10;//十进制
              int i2=010;//八进制0
              int i3=0x10;//十六进制0x  0~9 A~F 16
      
              System.out.println(i);
              System.out.println(i1);
              System.out.println(i2);
              System.out.println(i3);
              System.out.println("=============================================================");
      
              //=============================================================
              //浮点数拓展: 银行业务怎么表示?钱
              //BigDecimal  数学工具类
              //=============================================================
              //float: 有限  离散        存在舍入误差  只是大约  接近但不等于
              //double;
              //最好完全使用浮点数进行比较
              //最好完全使用浮点数进行比较
              //最好完全使用浮点数进行比较
              float f = 0.1f;  //0.1
              double d = 1.0/10;  //0.1
      
              System.out.println(f==d);//false
      
              float d1 = 213131313212313f;
              float d2 = d1+1;
      
              System.out.println(d1==d2);//true
              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) 2字节  0~65536 Excel  2的16次方=65536
      
              //U0000 UFFFF
      
              char c3 = '\u0061';
              System.out.println(c3);//a
              System.out.println("=============================================================");
              //转义字符
              //  \t  制表符
              //   \n  换行
      
              System.out.println("Hello\tWorld");
              System.out.println("Hello\nWorld");
              System.out.println("=============================================================");
              //
              String sa = new String("Hello world");
              String sb = new String("Hello world");
              System.out.println(sa==sb);//false
      
              String sc = "Hello world";
              String sd = "Hello world";
              System.out.println(sc==sd);//true
              //对象 从内存分析
              
              //布尔值扩展
              boolean flag = true;
              
              if(flag==true){}  //新手
              if(flag){}  //老手
              //Less is More! 通俗讲:精简易读
          }
      }
      

三、类型转换

Java基础05

1、为什么需要类型转换?

答:由于Java是强类型语言,所以要进行某些运算的时候,需要用到类型转换。

优先级:低--------------------------------------------------------------->高

​ byte,short,char-> int -> long -> float -> double

2、如果运算时,不同类型的数据先转化为同一类型,然后进行运算。

3、两种转化类型:

  • 强制类型转化
  • 自动类型转化
public class Demo04 {
    public static void main(String[] args) {
        int i = 128;
        byte b = (byte) i;//byte超过最大值了,导致内存溢出了,在转化过程中要避免此类情况发生
        //强制转化    (类型名)+变量名  高--->低
        //自动转化     低--->高
        double c = i;
        System.out.println(i);
        System.out.println(b);
        System.out.println(c);

        /*
        注意点:
        1.不能对布尔值进行转换
        2.不能把对象类型转化为不相干的类型
        3.在把高容量转换到低容量时,强制转换
        4.强制转换时可能存在内存溢出,或者精度问题!
        */
        System.out.println("=================");
        System.out.println((int)23.7);//23
        System.out.println((int)-45.89f);//-45

        System.out.println("=================");
        char d = 'a';
        int e = d+1;
        System.out.println(e);
        System.out.println((char)e);
    }
}

4.溢出问题

public class Demo05 {
    public static void main(String[] args) {
        //操作比较大的数的时候,注意溢出问题
        //JDK7以上新特性,数字可以用下划线分割
        int money = 10_0000_0000;
        int years = 20;
        int total = money*years;//-1474836480,计算的时候溢出了
        long total2 = money*years;//-1474836480,先是默认为int时,money和years相乘,而乘的结果已经出问题了,
                                                // 再把结果转化为long型也是有问题的
        // 正确操作
        long total3 =money*((long)years);

        System.out.println(total);
        System.out.println(total2);
        System.out.println(total3);
        
        //long 后面的L和l,但因为小写l容易看成1所以尽量用大写,以区分
    }
}

四、变量、常量

Java基础06:变量、常量、作用域

  • 变量
  1. 变量是什么:就是可以变化的量;
  2. Java时一种强类型语言,每个变量必须声明其类型。
  3. Java变量时程序中最基本的存储单元,其元素包括变量名,变量类型和作用域
type varName   [=value] [{,varName[=value]}];
//数据类型   变量名 = 值; 可以使用逗号隔开来声明多个同类型变量。

public class Demo06 {
    public static void main(String[] args) {
        //int a,b,c;//变量声明,但不建议同时声明多个变量
        //int a=1,b=2,c=3;
        //以上不是很提倡,我们要让程序具有可读性
        String name = "Devin~Y";
        char x = 'X';
        double pi = 3.14;
    }
}
  1. 注意事项:

​ a、每个变量都有类型,类型可以是基本类型,也可以是引用类型。

​ b、变量名必须是合法的标识符。

​ c、变量声明必须是完整的语句,因此每一个声明必须以分号结束。

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

    //类变量  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 Demo07();
        Demo07 demo07 = new Demo07();
        System.out.println(demo07.age);
        System.out.println(demo07.name);

        //类变量   static
        System.out.println(salary);
    }
    //其他方法
    public void add(){
    }
}
  • 常量
  1. 什么是常量:顾名思义,初始化后不能再改变的值!不会发生变动的值;
  2. 常量可以理解为是变量的一种特殊形式,它的值被设定后,在运行过程中是不允许被改变的;
final 常量名=值;
final double PI=3.14;    
  1. 常量名一般用大写;
public class Demo08 {
    
    //修饰符,不存在先后顺序
    final static double PI = 3.14; 
    
    public static void main(String[] args) {
        System.out.println(PI);
    }
}
  • 变量的命名规范
    • 所有变量、方法、类名:见名知意
    • 类成员变量:首字母小写和驼峰原则;monthSalary;除了第一个单词外,后面的单词首字母大写name;
    • 局部变量:首字母小写和驼峰原则;
    • 常量:大写字母和下划线:MAX_VALUE;
    • 类名:首字母大写和驼峰原则:Man,GoodMan;
    • 方法名:首字母小写和驼峰原则:run(),runRun();

五、运算符

Java基础07:基本运算符

  • 算术运算符:+、-、*、/、%、**、--

  • 赋值运算符:=

  • 关系运算符:>、<、>=、<=、==、!=instanceof

  • 逻辑运算符:&&、||、!

  • 运算符:&、|、^、~、>>、<<、>>>(了解!!!)

  • 条件运算符

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

    public static void main(String[] args) {
        // 二元运算符,算术运算符
        int a = 10;
        int b = 20;
        int c = 25;
    
        System.out.println(a+b);
        System.out.println(a-b);
        System.out.println(a*b);
        System.out.println((float)a/b);
        System.out.println(c%b);//结果为5————————> 25/20=1.....5
    }
    ===================================================
     public static void main(String[] args) {
            //关系运算符返回的结果:正确,错误   布尔值
    
            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);
        }
    

Java基础08:自增自减运算符(重要)、初始Math类

public static void main(String[] args) {
    //++(自加)    --(自减) ----------->一元运算符
    int a = 3;
    int b = 3;
    
    System.out.println(a++);//结果为3
    System.out.println(a);//结果为4
    System.out.println(++a);//结果为5

    System.out.println(b--);//结果为3
    System.out.println(b);//结果为2
    System.out.println(--b);//结果为1

    //以上可以得出,如果++或者--出现在变量值之前,则会马上加一或者减一 ;口诀(++ ,--放前面,先赋值,再自增)
    //但是放在后面,则会先把该变量值原本的值给输出后,才会加一或者减一 ; 口诀(++ ,--放后面,先自增,再赋值)
    //上述例子多分析几次,则可以轻松看出
    
    
    //幂运算 2^3------->2*2*2=8  
        double pow = Math.pow(2, 3);
        System.out.println(pow);//结果为8
    //这种方法需要借助Java自带的 Math工具类,以便为了各种数学计算,后面单独写一篇各种Java工具类,期待后续哦!
}

Java基础09:逻辑运算符、位运算符

public static void main(String[] args) {
    //与 (&&)  或 (||)  非 (!)
    //  and      or      取反

    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));//true

    System.out.println("===========================");
    
    int a1 = 1;
    int b1 = 0;
    System.out.println("a && b:"+(a&&b));//false
    System.out.println("a || b:"+(a||b));//true
    System.out.println("!(a && b)"+!(a&&b));//true

    //以上结果可以得出结论:
    /*
    逻辑与运算(&&):两者判断, 一 true 一 false则为false;两个为true则为true;两个为false则必为false
    逻辑或运算(||):两者判断, 一 true 一 false则为true;两个为true则必为true;两个为false则为false
    逻辑非运算(!):两者判断,是true则为false;是false则为true。
     */
    
    //还有一种运算短路情况:即在逻辑与运算中如果前者就为false,则直接为false,后者不会在运算了
    int c = 5;
    boolean d = (c<4)&&(c++<4);
    System.out.println(d);
    System.out.println(c);
}

    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
        除 ^ 两者相同取0,不相同取1以外,其他三个与前面逻辑运算对照来看。

        2*8 = 16 2*2*2*2
        效率极高

        <<左移 *2
        >>右移 /2

        0000 0000  0
        0000 0001  1
        0000 0010  2
        0000 0011  3
        0000 0100  4
        0000 1000  8
        0001 0000  16

         */
        System.out.println(2<<3);//结果为16
        System.out.println(2>>1);//结果为1
    }

三元运算符级小结

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

    a+=b;//相当于 a=a+b;
    b-=a;//相当于 b=b-a;

    System.out.println(a);//30
    System.out.println(b);//-10

    //字符串连接符 + 号
    System.out.println(a+b);
    System.out.println(""+ a + b);//结果为 a=30;b=-10
    System.out.println(a + b+"");//结果为 20
}

public static void main(String[] args) {
        // x ? y : z
        //如果x==true,则结果为y,否则为z
        int a =10;
        int b =20;
        String m = a+b>30? "30":"50";
        String n = a+b>20? "30":"50";
        System.out.println(m);//结果为50
        System.out.println(n);//结果为30
    }

运算符优先级需要大家自己去了解哦。

六、包机制、JavaDoc

Java基础11:包机制

  • 为了更好的组织类,Java提供了包机制,用于区别类名的空间。
  • 包语句的语法格式为:
package pkg1[.pkg2[.pkg3...]];
  • 注:一般用公司域名倒置作为包名:
  • 为了能够使用某一个包成员,我们需要在Java程序中明确导入该包,使用“import”语句可以完成此功能
import package1[.package2...].(classname|*);

Java基础12:JavaDoc生成文档

  • javadoc命令是用来生成自己的API文档的————Java的帮助文档地址https://docs.oracle.com/javase/8/docs/api/
/*
* @author Devin~Y
* @version 1.0
* @since 1.8
*/
public class Doc {
    String name;
/*
* @author Devin~Y
* @param name
* @return
* @throws Exception
*/    
    public String test(String name) throws Exception{
        return name;
    }
    
/*
* @author 作者名
* @version 版本号
* @since 指明需要最早使用的jdk版本
* @param 参数名
* @return 返回值类型
* @throws 异常抛出情况
*/    
}

这一篇干货满满哦!

posted @ 2021-11-24 21:38  Devin-Y  阅读(29)  评论(0编辑  收藏  举报