Java基础语法

java基础语法


 

Java三大版本

JDK:Java Development Kit JAVA开发者工具 JDK包含JRE

JRE:Java Runtime Environment JAVA运行时环境 JRE包含JVM

JVM:Java Virtual Machine JAVA虚拟机

 

卸载JDK

  1. 右键我的电脑-->属性-->高级系统设置-->环境变量,在系统变量中找到JAVA_HOME,双击找到目录直接删除,将该环境变量删除,再在Path中找到与JAVA相关环境变量删除。

  2. 打开运行,输入java -version,如显示java不是内部命令也不是外部命令则卸载成功。

    或

  3. 删除Java的安装目录

  4. 删除JAVA_HOME

  5. 删除Path下关于Java的目录

  6. 在CMD中输入Java -version判断

 

安装JDK

  1. 在官网下载JDK8安装包并打开

  2. 设置安装目录并记住

  3. 配置环境变量

    1. 我的电脑-->右键-->属性-->高级系统设置

    2. 环境变量-->JAVA_HOME,新建系统变量,变量名为JAVA_HOME 变量值为JDK安装的目录

    3. 配置Path变量,其一指向JDK安装目录下的bin目录,其一指向JDK安装目录下jre下bin目录

  4. 打开CMD中输入java -version,若出现java安装版本则安装成功

 

Hello,World!

  1. 新建文件夹用来存放代码

  2. 新建一个java文件

    • 文件后缀名为.java

    • Hello.java

  3. 编写代码

    public class Hello{
        public static void main(String[] args){
            System.out.print("Hello,World!");
        }
    }

     

     

  4. 编译 javac java文件,生成一个class文件,输入javac xx.java命令

  5. 运行class文件,java class文件,输入java xx命令

 

可能遇到的问题

  1. 每个单词的大小写固定,不能混淆,Java是大小写敏感的

  2. 尽量使用英文

  3. 文件名要与类名必须保证一致

  4. 符号不能用中文符号

 

JAVA程序运行机制

  • 编译型

  • 解释型

JAVA既有编译型特点,也有解释型特点

 


 

 

创建项目

创建空项目-->文件-->新建模块-->文件-->项目结构-->在项目SDK栏选中自己的版本,选择合适的项目语言等级

注释

注释不会被执行,是给人看的

  • 单行注释

    public class HelloWorld {
        public static void main(String[] args) {
            //单行注释
            //输出一个Hello World
            System.out.println("Hello,World!");
        }
    }
    //之后开始为注释

     

  • 多行注释

    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello,World!");
            //多行注释
            /*
            此为多行注释
            此为多行注释
            此为多行注释
             */
        }
    }
    /**/在两星号中间为多行注释

     

  • 文档注释

    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello,World!");
            //javaDoc:文档注释
            /**
            
            */
    ​
    ​
        }
    }
    /***/在第二个星号之后为文档注释

     

 

标识符

关键字

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

注意点

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

  • 首字母之后可以是任意字母(A-Z或者a-z),美元符($)下划线(_)或数字的任意组合

  • 不能用关键字作为变量名或方法名

  • 标识符是大小写敏感的,即大小写意义不同

  • 合法标识符举例:agb、$swd、_iske、__1_wkle

  • 非法标识符举例:143、-sjdk、#mji

 

数据类型

强类型语言

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

弱类型语言

  • 基本类型

  • 引用类型

 
 
  • 在未声明初始值时,int类型默认为0,String类型默认为null

  • 在使用long时数字后面要加L,用以区分

  • int最常用

  • 在使用float时数字后面要加F

  • 八大基本类型以外均为引用类型

public class learn {
    public static void main(String[] args) {
        //八大数据类型
​
        //整数
        int num1 = 10;//最常用
        byte num2 = 20;
        short num3 = 30;
        long num4 = 30L;//Long类型要在数字后面加L
​
        //小数:浮点数
        float num5 = 50.1F;//float类型要在数字后面加F
        double num6 = 3.1415926;
​
        //字符
        char name1 = 'A';
        //字符串,string不是关键字,是种类
        // string name2 = "xx";
​
        //布尔值:只能输出tyre或false
        boolean flag = ture;
        //boolean flag = false;
        
    }
}

 


​

字节

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

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

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

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

 

  • 1bit表示一位

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

  • 1024B=1kb

  • 1024kb=1M

  • 1024M=1G

数据类型扩展

 

进制

二进制有0b前缀

十进制

八进制有0前缀

十六进制有0x前缀

public class learn2 {
    public static void main(String[] args) {
        //进制扩展      进制      二进制0b       十进制     八进制0        十六进制0x
​
        int i = 10;
        int i2 = 0b10;//二进制
        int i3 = 010;//八进制
        int i4 = 0x10;//十六进制  0~9 A~F
​
        System.out.println(i);
        System.out.println(i2);
        System.out.println(i3);
        System.out.println(i4);
        System.out.println("====================");
​
        //浮点数拓展         银行业务怎么表示?通过BigDecimal 数学工具类
​
​
        //float         浮点数数据类型是有限的,离散的,有舍入误差的,是大约的,是接近但不等于的
        //double
        //最好不要使用浮点数进行比较
​
​
        float f = 0.1F;
        double d = 0.1;
​
        System.out.println(f==d);//false
​
        float d1 = 283746453738273f;
        float d2 = d1+ 1;
​
        System.out.println(d1==d2);//ture
​
        //字符拓展
        char c1 = 'a';
        char c2 = '中';
​
        System.out.println(c1);
​
        System.out.println((int)c1);//强制转换
​
        System.out.println(c2);
​
        System.out.println((int)c2);//强制转换
​
        //所有的字符串本质还是数字
        //char编码问题 Unicode编码  2字节    65536   Excel    2*16=65536
        
        
        //转义字符
        
        //U0000  UFFFF
​
        char c3 = '\u0061';
​
        System.out.println(c3);//a
​
        //\t    制表符
        //\n    换行符
        //...
​
        System.out.println("Hello\tWord");
​
        //==================================================================
​
        String sa = new String( original:"Hello World");
        String sb = new String( original:"Hello World");
        System.out.println(sa==sb);//false
​
        String sc = "Hello World";
        String sd = "Hello World";
        System.out.println(sc==sd);//ture
        //对象  从内存分析
        
        //布尔值扩展
        boolean flag = ture;
        
        if (flag==ture){}//新手       ==ture可省略
        if (flag){}//老手
        //less is more!代码要精简易读
​
    }
}

 

 

不要使用浮点数进行比较

 

类型转换

运算中,不同类型的数据要先转换成同一类型,然后进行运算。

 

数据类型由低到高

低----->----->----->---------->--------->---------高

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

 

  • 强制转换

    (类型)变量名 可将括号后变量类型强制转换为括号内类型,例(byte)i.

  • 自动转换

类型由高到低需要强制转换,由低到高可自动转换

public class learn3 {
    public static void main(String[] args) {
        int i = 128;
        byte b = (byte)i;//内存溢出
​
        //强制转换  (类型)变量名 可将括号后变量类型强制转换为括号内类型
​
        System.out.println(i);
        System.out.println(b);
​
        byte x = 111;
        int y = x;
        System.out.println(y);//已执行自动转换
​
        /*
        注意点
        1.不能对布尔值进行转换
        2.不能把对象类型转换为不相干的类型
        3.在把高容量转换到低容量的时候,强制转换
        4.转换的时候可能内存溢出,或者精度问题
         */
​
        System.out.println((int)23.7);  //23
        System.out.println((int)-24.89f);   //24
​
        char c = 'a';
        int d =c+1;
        System.out.println(d);
        System.out.println((char)d);
        
        //操作比较大的数的时候,注意溢出问题
        //JDK新特性,数字之间可以用下划线分割
        int money =100000_0000;
        System.out.println(money);
        int years =20;
        int total = money*years;
        long total2 =money*years;//默认为int,在转换之前已经溢出
        System.out.println(total);//-1474836480,计算的时候溢出了
        System.out.println(total2);//-1474836480
​
        long total3 = money*(long)years;//在计算前已经执行类型转换
        System.out.println(total3);//成功输出
​
​
    }
}

 


​

 

注意点 1.不能对布尔值进行转换 2.不能把对象类型转换为不相干的类型 3.在把高容量转换到低容量的时候,强制转换 4.转换的时候可能内存溢出,或者精度问题

 

变量常量和变量命名规范

变量

变量是什么:可以变换的量

java是一种强类型语言,每个变量都必须声明其类型。

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

 

type verName [=value] [{,varname[=value]}];

//数据类型 变量名 = 值;可以使用逗号隔开来声明多个同类型变量,但不建议。

注意事项

  • 每个变量都必须由类型,类型可以是基本类型,也可以是引用类型。

  • 变量名必须是合法的标识符。

  • 变量声明是一条完整的语法,因此每一个声明必须以分号结束。

  •  

变量作用域

  • 类变量:是从属于类的

  • 实例变量:在方法外,类内

  • 局部变量:在方法中间,必须声明和初始化值

public class Learn2 {
​
    //类变量  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);
        //变量类型      变量名字
        Learn2 learn2 = new Learn2();
        System.out.println(learn2.age);
        System.out.println(learn2.name);
​
        //类变量  static
        System.out.println(salary);
​
    }
​
    //其他方法
    public void add(){
​
    }
​
}

 


​

常量(静态变量)

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

可以通过final定义

final 常量名=值;
final double PI=3.14;

常量名一般使用大写字符

public class Learn {
    //修饰符,不存在先后顺序,变量名前都是修饰符
    static final double PI=3.14;
    
    public static void main(String[] args) {
        System.out.println(PI);//3。14
    }
}

 


​

变量的命名规则

  • 所有的变量、方法、类名、见名知意;

  • 所有成员变量:首字母小写和驼峰原则:monthSalary,除了第一个单词以外,后面的单词首字母大写 :lastName

  • 局部变量:首字母小写和驼峰原则

  • 常量:大写字母和下划线:MAX_VALUE

  • 类名:首字母大写和驼峰原则:Man,GoodMan

  • 方法名:首字母小写和驼峰原则:run(),runRun()

 

运算符

  • 算术运算符:+,-,*,/,%,++,-- %为取余运算(模运算)

  • 赋值运算符:=

  • 关系运算符:>,<,>=,<=,==,!=instanceof ==为是否等于,!=instanceof为不等于

  • 逻辑运算符:&&,||,! 即与或非

  • 位运算符:&,|,^,~,>>,<<,>>>

  • 条件运算符:? :

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

如果运算中有long类型,则结果为long类型,否则结果都为int类型,如果有double类型,则结果一定是double类型

package Learngo;
​
public class Learn04 {
​
    public static void main(String[] args) {
​
        long a =172635462;
        int b = 123;
        short c =10;
        byte d = 8;
​
        System.out.println(a+b+c+d);//long      如果运算中有long类型,则结果为long类型,否则结果都为int类型,如果有double类型,则结果一定是double类型
        System.out.println(b+c+d);//int
        System.out.println(c+d);//int
​
    }
}

 

 

运算举例

package Learngo;
​
public class Learn03 {
    public static void main(String[] args) {
​
        //把只有两个数相加运算符的叫做二元运算符
​
        //Ctrl+D     快捷键    复制当前行到下一行
        int a = 10;
        int b = 20;
        int c = 25;
        int d = 25;
​
​
        System.out.println(a+b);
        System.out.println(a-b);
        System.out.println(a*b);
        System.out.println((double)a/b);
        
​
    }
}

 


​

关系运算符举例

package Learngo;
​
public class Learn05 {
    public static void main(String[] args) {
​
        //关系运算符的返回结果:正确,错误  即布尔值
​
        int a = 10;
        int b = 20;
        int c =21;
​
        //取余,模运算
        System.out.println(c%a);//  c/a   21/10=2余1
​
        System.out.println(a>b);
        System.out.println(a<b);
        System.out.println(a==b);
        System.out.println(a!=b);
​
​
​
    }
}

 

 

幂运算需要使用Math,2^3,二的三次方,java中无此表达方式,要使用幂运算。

很多运算会使用工具类计算。

 

关于++运算符和--运算符

  • ++运算符:a=3,b=a++,将输出a=4,b=3,加号在后为先赋值再计算;a=3,b=++a,将输出a=4,b=4,加号在前为先计算再赋值。--运算符同理。

package Learngo;
​
public class Learn06 {
    public static void main(String[] args) {
​
        //++   --    自增   自减     一元运算符:只需要一个数就可运算
​
        int a = 3;
​
        //  a++  a = a + 1
        int b = a++;//执行完这段代码后,先给b赋值,再自增
        // a = a + 1
        System.out.println(a);
​
​
​
        int c = ++a;//执行完这段代码后,先自增1,再给c赋值
        //  ++a  a = a + 1
​
​
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
​
    }
}

 

 

逻辑符运算

短路运算

在执行逻辑运算时,当前面的运算已经为错时,后面的运算不再进行。

package Learngo;
​
//逻辑运算符
public class Learn08 {
    public static void main(String[] args) {
​
        //与   或   非
​
        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)));//逻辑非运算,如果为真则为假,如果为假则为真
​
​
        //短路运算
​
        int c = 5;
        boolean d = (c<4)&&(c++<4);
        System.out.println(d);
        System.out.println(c);
    }
    
}

 

位运算符(包括左右移运算符)

在二进制中使用

package Learngo;
​
public class Learn09 {
    public static void main(String[] args) {
        //位运算符      效率高!!!
        /*
        二进制
        A = 0011 1100
        B = 0000 1101
​
        A&B(与) = 0000 1100  如果两个都是1,则为1;有一个是0,则为0。
        A/B(或) = 0011 1101  如果两个都是0,则为0;有一个是1,则为1。
        A^B(亦或) = 0011 0001  如果两位置相同则为0;不相同则为1;
        ~B(非) = 1111 0010   取反
​
        2*8=?,2*2*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);
​
​
    }
}

 


​

扩展运算符

 

package Learngo;
​
//三元运算符
public class Learn11 {
    public static void main(String[] args) {
​
        //x?y:z
        //如果x==true,则结果为y,否则结果为z
​
        int a = 80;
        String type =  a<60?"不及格":"及格";
        //if
        System.out.println(type);
​
​
    }
}

 

 

优先级

可以使用括号标定优先级

一元运算符>+-*/等>其他

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

 

 

详细版

序列号符号名称结合性(与操作数)目数说明
1 . 点 从左到右 双目  
  ( ) 圆括号 从左到右    
  [ ] 方括号 从左到右    
2 + 正号 从右到左 单目  
  - 负号 从右到左 单目  
  ++ 自增 从右到左 单目 前缀增,后缀增
  - - 自减 从右到左 前缀减,后缀减  
  ~ 按位非/取补运算 从右到左 单目  
  ! 逻辑非 从右到左 单目 “!”不可以与“=”联用
3 * 乘 从左到右 双目  
  / 除 从左到右 双目 整数除法:取商的整数部分,小数部分去掉,不四舍五入
  % 取余 从左到右 双目  
4 + 加 从左到右 双目  
  - 减 从左到右 双目  
5 << 左移位运算符 从左到右 双目  
  >> 带符号右移位运算符 从左到右 双目  
  >>> 无符号右移 从左到右 双目  
6 < 小于 从左到右 双目 关系运算符“大于”说明
  <= 小于或等于 从左到右 双目  
  > 大于 从左到右 双目  
  >= 大于或等于 从左到右 双目  
  instanceof 确定某对象是否属于指定的类 从左到右 双目  
7 == 等于 从左到右 双目 关系运算符“==”说明
  != 不等于 从左到右 双目  
8 & 按位与 从左到右 双目  
9 | 按位或 从左到右 双目  
10 ^ 按位异或 从左到右 双目  
11 && 短路与 从左到右 双目  
12 || 短路或 从左到右 双目  
13 ? : 条件运算符 从右到左 三目  
14 = 赋值运算符 从右到左 双目  
  += 混合赋值运算符      
  -=        
  *=        
  /=        
  %=        
  &=        
  |=        
  ^=        
  <<=        
  >>=        
  >>>=        

 

 

包机制

包的本质就是文件夹

一般利用公司域名倒置作为包名;www.baidu.com  com.baidu.www

定义包使用packge语句 packge xxx;

packge 必须放在最上面

packge 包名;

 

packge定义包,import导入包

 

导入包使用import语句

import 包名.类名;可以导入包下某个类

import 包名.*;可以导入包下所有类

 

JavaDoc

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

  • @author 作者名

  • @version 版本名

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

  • @param 参数名

  • @return 返回值情况

  • @throws 异常抛出情况

加在类上面就是类的注释,加在方法上面就是方法的注释

 

javadoc命令

javadoc -encoding UTF-8 -charset UTF-8

-encoding UTF-8 -charset UTF-8是为了使中文可以输出

转义符

\t,表示空格:System.out.print("\t");

\n,表示回车:System.out.print("\n"); 换行还可以用System.out.println();

转义字符意义ASCII码值(十进制)
\a 响铃(BEL) 007
\b 退格(BS) ,将当前位置移到前一列 008
\f 换页(FF),将当前位置移到下页开头 012
\n 换行(LF) ,将当前位置移到下一行开头 010
\r 回车(CR) ,将当前位置移到本行开头 013
\t 水平制表(HT) (跳到下一个TAB位置) 009
\v 垂直制表(VT) 011
\ 代表一个反斜线字符''' 092
' 代表一个单引号(撇号)字符 039
" 代表一个双引号字符 034
\? 代表一个问号 063
\0 空字符(NUL) 000
\ddd 1到3位八进制数所代表的任意字符 三位八进制
\xhh 十六进制所代表的任意字符 十六进制
posted @ 2021-04-14 16:04  清风_微凉  阅读(129)  评论(0)    收藏  举报