Java基础

Java基础

注释

  • 平时我们编写代码,在代码比较少的时候我们还可以看懂自己写的,但是当项目结构一旦复杂起来,我们就需要用到注释了。

  • 注释并不会被执行,是给我们写代码的人看的

  • 书写注释是一个非常好的习惯,平时写代码一定要注意规范。

  • Java中的注释有三种:

    • 单行注释: //可以注释一行文字

    • 多行注释: /*可以注释一段文字 */

    • 文档注释(即JavaDoc): /** javadoc命令是用来生成自己API文档的*/

      • 参数信息

      • @author 作者名

      • @version 版本号

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

      • @param 参数名

      • @return 返回值情况

      • @throws 异常抛出情况

public class HelloWorld {
    public static void main(String[] args) {
        //单行注释
        //输出一个Hello,World!
        System.out.println("Hello,World!");
    }
}
//多行注释
/*
*                    .-'-._
*                   /    e<
*               _.-''';  (
*     _______.-''-._.-'  /
*     ====---:_''-'     /  _  _     %%%%
*              '-=. .-'` _(_)(_)   %%|/%%%
*                _|_\_  (_)(_)(_) %%%%%%%%%%
*               //\\//\\//\\//\\//\\%/_%%%%%%%
*           ____\\//\\//\\//\\//\\// |__|/__%%%
*  ________(___  \\/\//\\//\\//\\//__//___%%%%%%%
*            / \  \_/ __ \___//------\--%%%%%%
*  _________/   \____/  \____/\\%%%%%%%%%%%%
*                              \_-%%%%%%%%
*
*/
//javadoc:文档注释
package com.gy.cn.base;
/**
 * @author surplus
 * @version 1.0
 * @since 1.8
 */
public class Doc {
    String name;

    /**
     *
     * @param name
     * @return
     * @throws Exception
     */
    public String test(String name) throws Exception{
        return name;
    }
    //通过命令行,    javadoc 参数 java文件   ,获得javaAPI文档

    //通过IDEA:
    // Tools-->Generate JavaDoc
    // -->File'...\Doc.java'-->output directory-->locale(zh_CN)
    // -->Other command line arguments:(-encoding UTF-8 -charset UTF-8 -windowtitle “Demo01导出配置” -link http://docs.Oracle.com/javase/7/docs/api)
    // 产生javaAPI文档
}

如何使用Intellij Idea生成JavaDoc文档

Java标识符和关键字

要想了解Java关键字,首先先了解Java标识符。Java所有的组成部分都需要名字,类名、变量名以及方法名都被称为标识符

Java关键字是 电脑语言 里事先定义的,有特别意义的 标识符 ,有时又叫 保留字 ,还有特别意义的变量。. Java的关键字对Java的 编译器 有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数。

标识符注意点
  • 所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始
  • 首字符之后可以是字母(A-Z或者a-z),美元符($),下划线(_)或数字的任何字符组合
  • 不能使用关键字作为变量名或方法名
  • 标识符是大小写敏感
  • 可以使用中文命名,但是一般不建议这样去使用,也不建议用拼音,很Low
public class Demo01 {
    public static void main(String[] args) {
        //合法的命名方式
        String 王者荣耀 = "黄金";//不建议使用
        System.out.println(王者荣耀);

        String Man = "伍仟&卦";
        String man = "伍仟&卦";
        //Java大小写敏感,Man和man是两个不同的变量
        
        String $name = "伍仟&卦";//首字母为美元符号
        String _name = "伍仟&卦";//首字母为下划线
        String _1 = "伍仟&卦";//首字母之后为数字
        String _s = "伍仟&卦";//首字母之后为英文小写
        String _S = "伍仟&卦";//首字母之后为英文大写
        String _$ = "伍仟&卦";//首字母之后为美元符号
        String __ = "伍仟&卦";//首字母之后为下划线
        //不合法的命名方式
        //String #name = "伍仟&卦";
        //String |name = "伍仟&卦";
        // String @name = "伍仟&卦";
        //String s# = "伍仟&卦";
        //String s^ = "伍仟&卦";
        //String class = "伍仟&卦"; 
        //关键字不能用来命名

    }
}
变量
  • 变量:可以变化的量
  • Java是一种强类型语言,每个变量都必须声明其类型
  • Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
type varName [=value][{,varName[=value]}];
//数据类型	变量名 = 值;	可以使用逗号隔开来声明多个同类型变量。
  • 注意事项
    • 每个变量都有类型,类型可以是基本类型,也可以是引用类型
    • 变量名必须是合法的标识符
    • 变量声明是一条完整的语句,因此每一个声明都必须以分号结束
public class Demo04 {
    public static void main(String[] args) {
        //强制转换 : (类型) 变量名    高--低
        //自动转换 :低--高
        //内存溢出:超出范围
        int i = 128;
        byte b =(byte) i;   //-128
        System.out.println(b);
        System.out.println("----------------------------");
        //精度丢失
        int f = (int)20.1f; //20
        double d = (int) 22.33; //22.0
        System.out.println(f);
        System.out.println(d);
        System.out.println("----------------------------");
        /*
        注意点:
        1.不能对布尔值进行转换
        2.不能把对象类型转化为不相干的类型
        3.在把高容量转换到低容量的时候,强制转换
        4.转换的时候可能存在内存溢出,或者精度问题
         */
        //操作比较大的数的时候,注意溢出问题
        //JDK7新特性:数字之间可以用下划线分割,输出结果不会影响
        int money = 10_0000_0000;
        int years = 20;
        int total1 = money*years;   //-1474836480,溢出问题
        long total2 = money*years;  //-1474836480,默认是int,计算之前就已经出问题了
        long total3 = money*(long)years;    //20000000000
        System.out.println(total3);
        System.out.println("----------------------------");

        /*
        Pass:写程序的过程中,我不小心把long写成了Long,然后代码就开始报错:
        Inconvertible types; cannot cast 'int' to 'java.lang.Long'
        不能自由兑换的类型;不能将'int'转换为'java.lang.Long'
        小写的long指的是基本类型,大写的Long指的是对象类型又称为包装类。
        Java是大小写敏感的语言,所以以后写Java程序也要切记不要写错大小写,不然代表的意义可能就不一样了。
         */
    }
}

Java数据类型

Java是一种强类型语言,要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。强类型语言安全性高,但是速度比较慢。强类型语言有Java、C、C++等。

与之相对应的是弱类型语言,要求变量的使用可以不用严格符合规定。弱类型语言安全性不高,但是速度比较快。弱类型语言有VB Script、JS等。

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

  • 基本类型(primitive type)
  • 引用类型 (reference type)
public class Demo02 {
    public static void main(String[] args) {
        //八大基本数据类型
        //整数
        byte num1 = 10;
        short num2 = 20;
        int num3 = 30;      //最常用
        long num4 = 40L;    //Long类型要在数字后面加个L

        //小数:浮点数
        float num5 = 50.1F; //Float类型要在数字后面价格F
        double num6 = 3.1415926;

        //字符
        char name = '伍';    //字符是单个字,用单引号表示
        //字符串,String,不是关键字,它是类
        //String sname = "伍仟&卦";  //要用双引号表示

        //布尔值:是非
        boolean flag = true;
        //boolean flag = false;
    }
}
什么是字节
  • 位(bit):是计算机内部数据储存的最小单位,11001100是一个八位二进制数

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

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

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

  • 1bit表示1位

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

  • 1024B = 1KB

  • 1024KB = 1M

  • 1024M = 1G

  • 1024G = 1TB

Java数据类型扩展
进制
  • 二进制开头用0b表示
  • 八进制开头用0表示
  • 十六进制开头用0x表示
public class Demo03 {
    public static void main(String[] args) {
        //整数拓展      进制      二进制0b       十进制     八进制0        十六进制0x
        int i = 10;
        int i1 = 010;       //八进制
        int i2 = 0x10;      //十六进制  0~9 A~F 16
        int i3 = 0b10;      //二进制
        System.out.println(i);
        System.out.println(i1);
        System.out.println(i2);
        System.out.println(i3);
    }   
}

得到的结果是:10、8、16、2,这也进一步验证了java里面进制的表示方式。

浮点数拓展

一般银行业务表示不会采用浮点数来表示,而是采用数学工具类BigDecimal表示。原因很简单:浮点数能表示的数有限,它会舍入误差,取得值并不准确。

   //浮点数拓展?    银行业务怎么表示?   钱
        //BigDecimal    数学工具类
        //------------------------------------------------------------
        //float     有限  离散  舍入误差    大约  接近但不等于
        //double
        //最好完全避免使用浮点数进行比较
        //最好完全避免使用浮点数进行比较
        //最好完全避免使用浮点数进行比较
        float f = 0.1f;     //0.1
        double d = 1.0/10;  //0.1
        System.out.println(f==d);//false

        float d1 = 23333334444444f;
        float d2 = d1 + 1;
        System.out.println(d1==d2); //true

上例中f和d变量虽然打印出的值都是0.1,但是不相等,是因为它们声明的数据类型不同,一个是float类型,一个是double类型;

而d1和d2明明相差了1,但是最后结果却相等,恰恰说明了浮点数的近似逼近运算。

字符拓展&转义字符

所有的字符本质上都是数字,字符通过unicode编码表编码后可以获得一个数字,这个数字能代替该字符。

比如,unicode表中的97代表小写字母a,65代表大写字母A。unicode是2字节的,范围在0-65536之间,当然现在可能更长。

  • 转义字符
  • \t:制表符
  • \n:换行
  • ......
 //字符拓展?
        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("Hello\nWorld!");
布尔值拓展

布尔值只有两个值:true 或 false。

用于判定或者条件时,新手通常会写完整的语句,即:变量名=true;但是老手通常不会这么做,它们直接写变量名来表示,使得代码更加精炼简洁。如:

 //布尔值扩展
        boolean flag = true;
        if(flag = true){};//新手
        if(flag){};//老手
        //Less is More! 代码要精简易读!

基本运算符

Java语言支持以下运算符:

  • 算术运算符:+,-,*,/,%,++,--
  • 赋值运算符:=
  • 关系运算符:>, <, >=, <=, ==, !=, instanceof
  • 逻辑运算符:&&,||,!
  • 位运算符:&, |, ^, ~, >>, <<, >>>(了解! ! !)
  • 条件运算符:? :
  • 扩展赋值运算符:+=,-=,*=,/=
算术运算符
  • +, -, *, /
package com.gy.cn.operator;

public class Demo01 {
    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((double)a/b);//0     10/20=0.5,a/b=0转化为了int类型,所以前面要加double转化为小数类型
        //%,取余,在Java中又称模运算
        //10%20     10/20=0...10
        System.out.println(a%b);//10
        //instanceof是Java中的二元运算符,左边是对象,右边是类;它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。当对象是右边类或子类所创建对象时,返回true;否则,返回false。
        //A a =new A()
        //result = a instanceof A   -->true
    }
}
  • ++ --:自增 自减
package com.gy.cn.base.operator;

public class Demo04 {
    public static void main(String[] args) {
        //++    --  自增,自减   一元运算符
        int a = 2;
        int b = a++;//执行完这行代码,先给b赋值,再自增
        //a = a+1
        System.out.println(a);
        System.out.println(b);
        //a = a+1
        int c = ++a;//执行完这行代码,先自增,再给c赋值
        System.out.println(a);
        System.out.println(c);
        System.out.println("-----------------------------------------");
        //幂运算   2^3 = 2*2*2 = 8
        //很多运算,我们会使用一些工具类来操作。这里的幂运算就是使用的工具类Math来运算的
        double d = Math.pow(2,3);
        System.out.println(d);
    }
}
赋值运算符
  • 赋值运算符:=
package com.gy.cn.operator;

public class Demo02 {
    public static void main(String[] args) {
        //=:赋值运算,int b = 13,将13赋值给b,b是int类型
        long a = 1314527902;
        int b = 13;
        short c = 9;
        byte d = 10;
        System.out.println(a+b+c+d);//1314527934    long类型
        System.out.println(b+c+d);//32    int类型
        System.out.println(c+d);//19  int类型
        /*
        上述结果说明:
        long类型的值和其他类型数值运算时,得到的仍是long类型,比如a+b+c+d;
        同理,如果一个数的类型是最高级别double类型的话,那么结果都是double类型;
        其他类型的值作运算时,得到的都是int类型,不管是否含有int类型的值,比如c+d,c/d
         */
    }
}
关系运算符
  • 关系运算符:>, <, >=, <=, ==, !=, instanceof
package com.gy.cn.operator;

public class Demo03 {
    public static void main(String[] args) {
        //关系运算符返回的结果:正确/错误  布尔值
        int a = 20;
        int b = 21;
        System.out.println(a>b);
        System.out.println(a<b);
        System.out.println(a==b);// ==:Java里面的等于运算符,用于判断两个数是否相等
        System.out.println(a!=b);// !=:不等于
    }
}
逻辑运算符
  • 逻辑运算符:&&,||,!
package com.gy.cn.base.operator;
//逻辑运算符
public class Demo05 {
    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 c = 30;
        boolean d = (c>60) && (c++<40);
        System.out.println(d);//false
        System.out.println(c);//30  c++没有执行,因为前面的c>60为假,所以后面的c++没有执行
    }
}
位运算符
  • 位运算符:&, |, ^, ~, >>, <<, >>>(了解! ! !)
package com.gy.cn.base.operator;
//位运算符
public class Demo06 {
    public static void main(String[] args) {
    // A & B:A与B   A | B:A或B   A ^ B:A、B异或,同0异1     ~B:非B
    // >>:右移,相当于\2     <<:左移,相当于*2
    /*
    A = 0100 1010
    B = 1010 1100
    -------------
    A&B=0000 1000
    A|B=1110 1110
    A^B=1110 0110
    ~B = 0101 0011

    假设要计算2*8 = 16的最快的计算方法,可以采用位运算    2*2*2*2
    位运算效率极高!!但是一般不要轻易使用位运算,容易出错。
    << *2
    >> /2
    拓展:>>> 是无符号右移运算符 用来将一个数的各二进制位无符号右移若干位,与运算符>>相同,移出的低位被舍弃,但不同的是最高位补0

    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   二进制位数向左移三位,相当于乘以2^3
        System.out.println(8>>3);//1    二进制位数向右移三位,相当于除以2^3
        System.out.println(16>>>3);//2
    }
}
条件运算符
  • 条件运算符:? :
package com.gy.cn.base.operator;
//三元运算符
public class Demo08 {
    public static void main(String[] args) {
        // x ? y :z
        //如果满足x==true,则结果为y,否则结果为z
        //必须掌握
        int score = 20;
        String type = score<60 ? "不及格":"及格";
        System.out.println(type);
    }
}
扩展赋值运算符
  • 扩展赋值运算符:+=,-=,*=,/=
package com.gy.cn.base.operator;
//扩展运算符
public class Demo07 {
    public static void main(String[] args) {
        int a = 3;
        a += 1;//a = a+1
        System.out.println(a);//4
        a -= 2;//a = a-2
        System.out.println(a);//2
        a *= 3;//a = a*3
        System.out.println(a);//6
        a /= 3;//a = a/3
        System.out.println(a);//2

        System.out.println("----------------------------------");
        int m = 22;
        int n = 30;
        //字符串连接符
        //'+'两侧,一方出现String类型就会把其他操作数转为字符串连接。
        System.out.println(""+m+n);//2230   先出现了空字符串,所以先将m和n转化为了字符串,然后连接在一起了
        System.out.println(m+n+"");//52     后出现的空字符串,所以先将m和n加起来,变成52,然后再和字符串连接变成字符
    }
}
Java运算符优先级

Java 语言中运算符的优先级共分为 14 级,其中 1 级最高,14 级最低。在同一个表达式中运算符优先级高的先执行。表 1 列出了所有的运算符的优先级以及结合性。

表1 运算符的优先级

优先级 运算符 结合性
1 ()、[]、{} 从左向右
2 !、+、-、~、++、-- 从右向左
3 *、/、% 从左向右
4 +、- 从左向右
5 «、»、>>> 从左向右
6 <、<=、>、>=、instanceof 从左向右
7 ==、!= 从左向右
8 & 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左
14 =、+=、-=、*=、/=、&=、 =、^=、~=、«=、»=、>>>=从右向左

使用优先级为 1 的小括号可以改变其他运算符的优先级,即如果需要将具有较低优先级的运算符先运算,则可以使用小括号将该运算符和操作符括起来。

包的本质就是文件夹。

  • 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间

  • 包语句的语法格式为:

  • package pkg1[.pkg2[.pkg3...]];
    
  • 一般利用公司域名倒置作为包名,比如百度的网址为:www.baidu.com-->包名就是:com.baidu.www

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

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

Java命名规范

Pass:本JavaSE学习均来源于免费课程-KuangStudy有兴趣的伙伴可以点击链接学习。

posted @ 2021-08-10 21:10  Cara_Smith  阅读(65)  评论(0编辑  收藏  举报