Java基础语法

1.1 原码,反码,补码,二进制

原码,反码,补码

正数的反码补码都是原码。

计算机是以补码的形式存储二进制数的,因为要保证例如(+1)+(-1)的情况要等于0以及0000 0000和1000 0000表示的都是0。

原码:指原来本身的数;

反码(仅负数):符号位不变,其余数0变1,1变0;

补码(仅负数):反码+1。

十进制转二进制

image

为避免各类进制的混淆,每种进制在计算机中会加前缀以此区分

  • 二进制:0b前缀,如0b1010是十进制的10
  • 八进制:0前缀,如012是十进制的10
  • 十进制:无前缀
  • 十六进制:0x前缀,如0xA是十进制的10,其中x是英文字母而非乘号

1.2 Markdown学习

标题大小

格式:n个# + 标题文本

字体

Hello,world!

Hello,world!

Hello,world!

Hello,world!

引用

应用样式语法:输入>空格 ,再输入文本内容

分割线



格式:三个-或者三个*

图片

插入图片格式:! [图片名称] ()

网络图片:需输入图片的地址下图地址:https://pic1.zhimg.com/70/v2-8eb7f796cf61db277b986fc4da30a18c.jpg

截图2

超链接

点击跳转到Ayisprite博客

列表

有序列表

格式:输入1.空格,然后输入文本内容,回车会自动生成有序列表

  1. A
  2. B
  3. C

无序列表

格式:输入-空格,然后输入文本内容,回车会自动生成无序列表

  • A
  • B
  • C

代码

大段代码引用格式:三个`加上语言

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

文本穿插代码格式:两个`中间输入代码内容

今天我们来学习第一个程序:public class Hello

1.3 Java学习路线

image-20220310164952004

JDK 、JRE 、JVM之间的关系

image

1.4 安装与卸载jdk

安装jdk

  1. 百度搜索JDK8,找到下载地址,版本号:jdk-8u181

  2. 同意协议

  3. 下载电脑对应版本

  4. 记住安装路径

  5. 配置环境变量

    • 右键我的电脑点击属性

    • 搜索高级系统设置

    • 点击环境变量image

    • 新建系统变量安装图示填写image

    • 双击系统变量中的path,配置path变量,如图所示image

  6. cmd中输入java -version确认是否安装成功

卸载jdk

  1. 删除java的安装目录
  2. 删除JAVA_HOME
  3. 删除path下关于java的目录
  4. java -version确认是否卸载成功

1.5 Hello,world!

  1. 在代码所在路径前加上cmd和空格再按回车即可转到cmd界面image

  2. 输入javac Hello.java编译代码文件,文件夹会生成一个class文件

  3. 输入java Hello运行class文件得出输出结果Hello,world!

1.6 在IDEA创建一个项目

视频链接:https://www.bilibili.com/video/BV12J41137hu?p=21&spm_id_from=pageDriver【狂神说Java】Java零基础学习视频通俗易懂 P21 java基础01:注释

1.7 IDEA 快捷键

  • psvm:public static void main(String[] args){}

  • sout:System.out.print();

  • 删除一整行:Ctrl+Y

  • 复制当前行到下一行:Ctrl+D

  • 整理代码格式:Ctrl+alt+L

  • 添加代码块:Ctrl+alt+t

  • 多行注释:/*加回车

  • JavaDoc文档注释:/**加回车

  1. 行注释Ctrl+/
    首先你的光标要处于这一行,处于这行的哪个位置都可以,按Ctrl+/,就可以往行首添加"//",将该行注释掉。再次按Ctrl+/,可以去掉该行注释。

img

  1. 块注释Ctrl+Shift+/
    使用块注释需要先选中要注释的块。

img

按Ctrl+Shift+/注释掉该块代码

  • 代码块生成快捷键:选中要包裹代码块的代码,ctrl+alt+t

1.8 数据类型

image

public class demo1 {
    public static void main(String[] args) {

        byte num1 = 1;
        int num2 = 200;
        short num3 = 29;
        long num4 = 30L;//long类型要在数字后加L

        float num5 = 20.1F;//float类型要在数字后加F
        double num6 = 3.1415926;

        char character = 'A';
        String name = "Ayisprite";//String 不是关键字,而是一个类

        boolean flag = true;
    }
}

最好完全使用浮点数进行比较,案例如下

float a = 0.1f;//0.1
double b = 1.0/10;//0.1
System.out.println(a==b);//输出ab是否相等,结果输出false

float c = 12111222f;
float d = c + 1;
System.out.println(c==d);//输出ab是否相等,结果输出true

所以在使用大数额的小数时,使用数学工具类BigDecimal

1.9 类型转换

image

强制类型转换(转换由高-->低)

public class demo1 {
    public static void main(String[] args) {
        int i = 128;
        byte b = (byte) i;//强制类型转换格式:(类型)变量名
        
        System.out.println(i);//输出128
        System.out.println(b);//输出-128,因为byte最大容纳127,128会造成溢出
    }
}

自动类型转换(转换由低-->高)

public class demo1 {
    public static void main(String[] args) {
        int i = 128;
        double d = i;//由低容量到高容量不用强制转换,此时可自动转换

        System.out.println(i);//输出128
        System.out.println(d);//输出128.0
    }
}

强制转换可能会出现精度问题

public class demo1 {
    public static void main(String[] args) {
        System.out.println((int)23.48);//输出为23
        System.out.println((int)45.89f);//输出为45
    }
}
  • 注意点
  1. 不能对布尔值进行转换
  2. 不能把对象类型转换为不相干的类型
  3. 在将高容量类型转换成低容量类型时,需要强制转换,反之不用管,直接赋值即可
  4. 强转换可能会出现内存溢出,或精度问题

int强转成char

public class demo1 {
    public static void main(String[] args) {
        char c = 'a';
        int d = c + 1;
        System.out.println(d);//输出98
        System.out.println((char) d);//输出b
    }
}

要注意转换中存在的溢出问题

public class demo1 {
    public static void main(String[] args) {
        int money = 10_0000_0000; //jdk7新特性,数字之间可以用下划线分割
        System.out.println(money);//输出1000000000,并不会输出下划线
        int years = 20;
        int total = money*years;//此时total是-1474836480,超出了int的容量
        long total2 = money*years;//此时total2是-1474836480,因为转换前就已经默认money*years是int
        long total3 = money*((long)years);//先把其中一个数转换为long
        System.out.println(total3);//此时输出20000000000,得到正确结果
    }
}

1.10 变量作用域和常量

变量

  • 类变量:加static的变量,不需要new一个对象再调用,可以直接调用
  • 实例变量:不加static的变量,调用时要先new一个对象再用对象调用
  • 局部变量:超出作用范围就无效的变量
  • 【小结】加不加static的区别在于:加static可以直接用类名.变量(或者加了static的方法),不加static必须new一个对象再对象名.变量(或者没加static的方法)

静态变量和实例变量的区别:

  • 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。

  • 在程序运行时的区别:

    1. 实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。

    2. 静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。

    3. 总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

public class Demo02 {
    static double salary = 2500;//类变量,要加前缀static,从属于类,在使用时不用demo02.salary,可以直接salary

    int age = 24;//在类里方法外申明的变量叫实例变量,从属于对象,如果不自行初始化就会是默认值
    String name;//boolean默认是false,除了基本类型,其余的默认值都是null

    public static void main(String[] args) {
        int i = 10;//局部变量,必须声明和初始化值,只在方法里有效

        Demo02 demo02 = new Demo02();
        System.out.println(demo02.age);//因为没有对实例变量age进行初始化,所以输出的是int的默认值0
        System.out.println(demo02.name);//因为没有对实例变量name进行初始化,所以输出的是String的默认值null

        System.out.println(salary);//使用时直接salary,不用demo02.salary
    }

    //类里有一个main方法和其他可创建的新方法
    public void add(){

    }

}

常量

static final double PI = 3.14;
//final和static修饰符顺序可以颠倒,定义常量用final关键字,常量名一般大写,用static修饰是确保能直接用PI来使用

变量的命名规范

  • 所有变量、方法、类名:见名知意
  • 类变量:首字母小写和驼峰原则:除第一个单词以外,后面的单词首字母大学,例:student,studentName
  • 局部变量:首字母小写和驼峰原则:跟类变量一样
  • 常量:大写字母和下划线:例:PI,MAX_VALUE
  • 类名:首字母大写和驼峰原则:例:Student,StudentName
  • 方法名:首字母小写和驼峰原则:例:student(),studentName()

1.11 运算符

java支持如下运算符

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

各种数据类型的运算造成的结果类型不同

long a = 12312331343442L;
int b = 123;
short c = 10;
byte d = 8;

System.out.println(a+b+c+d);//Long,如果多个数进行运算,只要含long那结果就是long型
System.out.println(b+c+d);//Int,没有long,统一结果都是int型
System.out.println(c+d);//Int,没有long,统一结果都是int型,即使参与运算的没有int型

数学工具类

double pow = Math.pow(2,3);//调用数学工具类来进行幂运算,很多运算会使用一些工具类来操作

逻辑运算符 &&,||,!

package operator;

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

        //输出括号里可以用(“输出文本”+变量)的形式来连接两个部分共同输出
        System.out.println("a&&b:"+(a&&b));//false
        System.out.println("a||b:"+(a||b));//true
        System.out.println("!(a&&b):"+!(a&&b));//true

        //在进行a&&b时,若检测到a是false会直接跳过b值的验算,因为与运算只要有false结果就是false,可以用短路运算证明
        int c = 5;
        boolean d = (c<4)&&(c++<4);
        System.out.println(d);//输出一定是false
        System.out.println(c);//若输出为6则进行了c的自增操作,若输出为5则没有自增操作,输出结果为5,所以证明成功
    }
}

位运算(跟二进制有关的运算)&,|,^,~,>>,<<,>>>

  • &:与,只有两个1才会得出1,其余结果全是0
  • |:或,只有两个0才会得出0,其余结果全是1;也可以这样解释:有一个1就是1,没1就是0
  • ^:取反,也可以叫异或,相同得0,不同得1
  • ~:非,1变0,0变1

A=0011 1100

B=0000 1101

则:

A&B=0000 1100

A|B=0011 1101

A^B=0011 0001

~B=1111 0010

  • <<相当于*2,在二进制里相当于让1左移一位,>>相当于/2,在二进制里相当于让1右移一位
  • 这两个运算符运行效率极高

DEC:1 BIN:0000 0001

DEC:2 BIN:0000 0010

DEC:4 BIN:0000 0100

DEC:8 BIN:0000 1000

DEC:16 BIN:0001 0000

DEC:32 BIN:0010 0010

扩展赋值运算符

int a = 10;
int b = 20;

a+=b;//a=a+b
a-=b;//a=a-b

字符串连接符+

int a = 10;
int b = 20;

//输出括号里出现字符串会把所有内容转换成String型
System.out.println(a+b);//输出为30
System.out.println(""+a+b);//输出为1020
System.out.println(a+b+"");//输出为30,字符串在最后面的时候,会先进行运算操作

三元运算符

x ? y : z

如果x==true,则结果为y,否则为z

int age = 23;
String result = age>18 ? "成年" : "未成年";
System.out.println(result);//输出成年

1.12 包机制

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

  • 一般使用公司域名倒置最为包名

  • 包语句的语法格式为:package pkg1[.pkg2[.pkg3....]];

    例如:package com.liam.base

为了能够使用某一个包的成员,我们需要在java程序中导入该包,使用import关键字可完成此功能

  • import语法格式为:import pkg1[.pkg2....].(classname|*);

    可以用import导入到某个包的具体一类,也可以用*来导入所有类

    例如:import com.liam.base

    import com.liam.base.Demo01

    import com.liam.base.*

  • package应在代码最上边,import不能在package上面

1.13 JavaDoc

参数信息

  • @author 作者名
  • @version 版本号
  • @since 指明需要最早使用的jdk版本
  • @param 参数名
  • @return 返回值情况
  • @throws 异常抛出情况
package com.liam.base;

/**
 * @author Liam
 * @version 1.0
 * @since 1.8
 */
public class Doc {
    String name;


    /**
     * @author Liam
     * @param name
     * @return
     * @throws Exception
     */
    public String test(String name)throws Exception{
        return name;
    }
}

用命令行生成JavaDoc

首先在cmd中进入目标文件所在路径,再以“javadoc 参数 文件名.java”的格式输入命令即可

image

javadoc -encoding UTF-8 -charset UTF-8 Doc.java

【注】高亮部分是为了让文件更有可读性,总体的格式还是javadoc 参数 文件名.java

posted @ 2022-03-14 11:36  雪碧锅仔饭  阅读(84)  评论(0)    收藏  举报