感谢B站狂神的学习资源,有兴趣的可以去搜索:遇见狂神说。


1.Java简介

1、java的特性和优势:

简单性、面向对象、可移植性、高能性、分布式、动态性、多线程、安全性、健壮性。

2、Java的三大版本:

  • JavaSE:标准版(桌面程序,控制台开发……)
  • JavaME:嵌入式开发(手机、小家电……)
  • JavaEE:E企业级开发(Web端、服务器开发……)

3、Java安装与卸载开发环境

卸载JDK:删除JAVA_HOME;删除Java安装目录;删除path下关于java的目录;java -version验证。

jdk安装教程:https://blog.csdn.net/weixin_42132352/article/details/114348838。官网下载JDK8(选择JDK8,比较稳定),或者在地址这下载

IDEA2020.2安装:https://www.jb51.net/article/194557.htm


2.Hello World

编译运行Hello.java文件(cmd)

public class Hell0 {
/**
 * @author --D
 * @create 20210925
 * 文档中注释JavaDoc
*/
	public static void main(String[] args) {
		System.out.println("Hello World!Java!");  // 单行注释
	}
}

/*
多行注释
*/   

$ javac Hello.java:编译java文件,会生成一个java.class文件!
$ java Hello:运行java.class文件。
注意:文件名和类名必须保证一致,并且首字母大写,如:public class Hello{}。


3.标识符与关键字

1、标识符

  • 所有的标识符都应该以字母(A-Z 或 a-z)、$、或下划线(_)开始;
  • 首字符之后可以是字母(A-Z 或 a-z)、$、下划线(_)或数字的任何组合;
  • 不能使用关键字作为变量名或方法名;
  • 标识符是大小写敏感的;
  • 可以使用中文命名,但是一般不建议这样去使用,也不建议使用拼音。

2、关键字

abstract boolean break byte case
catch char const class continue
default do double else extends
final finally float for goto
if implements import instanceof int
interface long native new package
private protected public return short
static strictfp super switch this
throw throws transient try void
volatile while synchronized

4.数据类型

1、强类型语言、弱类型语言

Java是一种强类型语言。判断的根本:是否会隐形进行语言类型转变。

强类型语言:变量被定义类型后,如不经强制转换,它就永远是该数据类型。类型安全。如C、C++、Java、python等。

弱类型语言:变量类型可根据环境变化自动进行转换,不需要经过现行强制转换。类型不安全。如PHP、JavaScript、。

强类型语言在速度上可能略逊于弱类型语言,但是强类型定义语带来的严谨性又避免了不必要的错误。

2、动态类型语言、静态类型语言

动态语言与静态语言区分的根本:在运行期间去做数据类型检查,还是在编译期间检查。

动态类型语言:在运行期间做数据类型检查的语言。即动态类型语言编程时,永远不用给任何变量指定数据类型,该语言会在第一次赋值给变量时,在内部将数据类型记录下来。如:Python、JavaScript、PHP、Ruby等。

静态类型语言:在编译期间做数据类型检查的语言,即在写程序时要声明所有变量的数据类型,是固定的,如:C、C++、C#、Java等。

3、数据类型分类

Java的数据类型分为两大类:基本类型、引用类型。

8大基本数据类型:

  • 数值类型:
    • 整数类型:byte占1字节,short占2字节,int占4字节,long占8字节;
    • 浮点类型:float占4字节,double占8字节;
    • 字符类型:char占2字节;
  • boolean类型:占1位其值只有tue和fase两个。

引用类型:类、接口、数组

public class Demo {
    public static void main(String[] args) {
        // 整数类型 & 进制的表示
        int num1 = 10;  // 最常用
        long num4 = 40L; // Long类型要在数字后面加L

        // 浮点类型:小数
        float num5 = 50.1F; // float类型要在数字后面加F
        double num6 = 3.1415926534546246455;

        // 字符类型
        char name = 'A'; // 单引号?只能有一个字符
        
        // 布尔类型
        boolean flag = true;
        boolean flag2 = false;

        // 类(字符串)
        String names = "subeiLY"; // String是类,不是数据类型
    }
}

4、数据类型扩展:

public class Demo03 {
    public static void main(String[] args) {
        // 整数拓展:二进制0b 十进制 八进制0 十六进制0x
        int i = 10;     // 十进制,最常用
		int i3 = 010;	// 八进制,前面加上0
		int i4 = 0x10;	// 十六进制(0~9,A~F),前面加上0x(x不区分大小写)
 
        // 浮点数拓展
        // 银行业务怎么表示?钱(BigDecimal 数学工具类)
        // float(double) 有限 离散 舍入误差 大约 接近但不等于
        // 避免使用浮点数进行比较
        float f = 0.1f; // 0.1
        double d = 1.0/10;  // 0.1
        System.out.println(f==d);   // 输出false
 
        float d1 = 2425444564215654564f;
        float d2 = d1 + 1;
        System.out.println(d1==d2); // 输出true
 
        // 字符拓展
        char c1 = 'a';
        char c2 = '中';
        System.out.println(c2);
        System.out.println((int)c2);    // 强制转换
 
        // 所有字符的本质还是数字
        // 编码,Unicode表:2字节('\u0000'-'\uFFFF'),65536
        char c3 = '\u0061';
        System.out.println(c3); // 输出a
 
        // 转义字符:\u;\t 制表符;\n 换行
    }
}

5.类型转换

Java是强类型语言。运算中,不同类型的数据先转化为同一类型,然后进行运算。进行有些运算时,需要用到类型转换。

// 低 ------------------------------------------------> 高
// byte -> short -> char -> int -> long -> float -> double

public class Demo {
    public static void main(String[] args) {
        int i = 128;
        byte b = (byte)i; // b = -128,内存溢出;高->低,强制转换
        double b1 = i; // b = 128.0;低容量->高容量,自动转换
 
        /* 注意点:
        1.不能对布尔类型转换 
        2.不能将对象类型转换为不相干的类型 
        3.在把高容量转换到低容量时,强制转换 
        4.转换的时候可能存在内存溢出,或者精度问题! 
        */
    }
}

常见问题:

public class Demo05 {
    public static void main(String[] args) {
        // 操作比较大时,注意溢出
        int money = 10_0000_0000; // JDK7新特性,数字之间可以用下划线分割
        int years = 20;
        
        int total = money*years; // total = -1474836480,计算时溢出
        long total2 = money*years; // total2 = -1474836480,这里先计算再转换
        long total3 = money*(long)years; // 20000000000
    }
}

6.变量与常量

1、变量:可以变化的量。Java变量是程序中最基本的存储单元,三要素:变量名,变量类型和作用域。

2、注意事项:

Java是一种强类型语言,每个变量都必须声明其类型(类型可以是基本类型,也可以是引用类型)。

变量名必须是合法的标识符;变量声明是一条完整的语句,每一个声明都必须以分号结束。

3、变量作用域:类变量、实例变量、局部变量

public class Demo07 {
    // 1、类变量,在类里,有关键字static
    static double salary = 3000; 
    
    // 2、实例变量,在类里。从属于对象,需要通过类使用。
    // 如果不初始化,有默认值:null、0、0.0、False。除了基本类型,其余的都是null
    String name; 
 
    public void method(){
        int i = 0;  // 3、局部变量,在方法中。必须声明和初始化值
    }
 
    // main 方法
    public static void main(String[] args) {
        System.out.println(salary); // 类变量 static
        
        Demo07 demo07 = new Demo07();
        System.out.println(demo07.name); // 实例变量,输入null
    }
}

4、变量的命名规范:

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

5、常量( Constant):初始化( initialize)后不能再改变值!

常量名一般使用大写字符。所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。

public class Demo08 {    
    // final:修饰符,和static不存在先后顺序
    static final double PI = 3.14;
 
    public static void main(String[] args) {
        System.out.println(PI); // 因为static,所以PI可在这用
    }
}

7.基本运算符

Java语言支持如下运算符:

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

public class Demo01 {
    public static void main(String[] args) {
    	// ctrl+D:复制当前行到下一行
        long a = 123123123123123L;
        int b = 123;
        short c = 10;
        byte d = 8;
 
        // 1、二元运算符
        System.out.println(a+b+c+d); // long
        System.out.println(b+c+d); // int
        System.out.println(c+d);  // int,整数间进行运算,没有long时,short和byte会转为int类型
        System.out.println((double)c+d);
        
		// 2、幂运算 2^3
        double pow = Math.pow(2,3);
        System.out.println(pow);
        
        // 3、位运算符
        // A = 0011 1100
        // B = 0000 1101
        // A^B = 0011 0001 异或
        
        // 面试提:2*8 = 16,怎么运算最快?2*2*2*2,效率极高!!
        System.out.println(2<<3); // <<表示乘2,>>表示除2
        
        // 4、字符串连接符 +,String
        System.out.println(""+c+d); // 输出108,""先和a拼接,再和b拼接,a+b不进行算术运算
        System.out.println(c+d+""); // 输出18,a+b先进行算术运算,再和""拼接
    }
}

8.包机制

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

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

一般利用公司域名倒置作为包名,如:com.baidu.www。(在src下新建包)

为了能使用某一个包的成员,需要在导入该包。语法:import package1[. package..].(classname |*);


9.JavaDoc

javadoc -encoding UTF-8 -charset UTF-8 Doc.java // (cmd下)用来生成自己API文档的

参数信息:
@ author作者名
@ version版本号
@ since指明需要最早使用的jdk版本
@ paran参数名
@ return返回值情况
@ throws异常抛出情况