Skip to content

基础

1.Java简介

  • java的特性和优势

    • 简单性
    • 面向对象
    • 可移植性
    • 高性能
    • 分布式
    • 动态性
    • 多线程
    • 安全性
    • 健壮性
  • Java的三大版本

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

    • 卸载JDK
      • 删除Java安装目录;
      • 删除JAVA_HOME;
      • 删除path下关于java的目录;
      • java -version验证。
    • 下载路径:地址
    • 安装教程:传送门
      • 官网下载JDK8(选择JDK8,比较稳定);
      • 安装JDK,步骤如上==传送门==。

2.Hello World

  • Hello World

    1. 随便新建一个文件夹,存放代码。

    2. 新建一个Java文件

      1. 文件后缀名为.java
      2. Hello.java
      3. 注意:系统可能没有文件的后缀名,需手动打开显示文件后缀名。
    3. 编写代码

      java
      public class Hello {
      
      	public static void main(String[] args) {
      		System.out.println("Hello World!Java!");
      	}
      
      }
    4. 编译javac.java文件,会生成一个class文件!

    5. 运行class文件,java class文件。

      1621774927585

  • 可能会遇到的问题

    1. 每个单词的大小不能出现问题,==Java是大小写敏感的==;
    2. 尽量使用英文;
    3. 文件名和类名必须保证一致,并且首字母大写;
    4. 符号使用的了中文。
  • Java运行机制

    • 编译型
    • 解释型
  • IDEA2020.2安装

  • Java中的注释有三种:

    • 单行注释:只能注释一行文字
    • 多行注释:可以注释一段文字
    • 文档注释
java
public class Hello {
    // 单行注释

    /*
    多行注释
     */

    /**
     * 文档注释
     * @param args
     */
    public static void main(String[] args) {
        // 输出一个Hello World!
        System.out.println("Hello World!");
    }

    /**
     *    有趣的代码注释                            _(\_/)
     *                              ,((((^`\
     *                             ((((  (6 \
     *                           ,((((( ,    \
     *       ,,,_              ,(((((  /"._  ,`,
     *      ((((\\ ,...       ,((((   /    `-.-'
     *      )))  ;'    `"'"'""((((   (
     *     (((  /            (((      \
     *      )) |                      |
     *     ((  |        .       '     |
     *     ))  \     _ '      `t   ,.')
     *     (   |   y;- -,-""'"-.\   \/
     *     )   / ./  ) /         `\  \
     *        |./   ( (           / /'
     *        ||     \\          //'|
     *        ||      \\       _//'||
     *        ||       ))     |_/  ||
     *        \_\     |_/          ||
     *        `'"                  \_\
     *                             `'"
     *
     */
}

3.标识符与关键字

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

        String Ahello = "lazy";
        String hello = "lazy";
        String $hello = "lazy";
        String _hello = "lazy";

        String _vvhh = "lazy";
        String 王者荣耀 = "lazy";
        
    }
}
  • 关键字
abstractbooleanbreakbytecase
catchcharconstclasscontinue
defaultdodoubleelseextends
finalfinallyfloatforgoto
ifimplementsimportinstanceofint
interfacelongnativenewpackage
privateprotectedpublicreturnshort
staticstrictfpsuperswitchthis
throwthrowstransienttryvoid
volatilewhilesynchronized

4.数据类型

  • 强类型语言
    • 要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。
  • 弱类型语言
  • 数据类型基本分类
    • 基本类型
      • 数值类型
        • 整数类型
          • byte占1字节,范围:-128 - 127
          • short占2字节,范围: -2^15 - 2^15-1
          • int占4字节,范围: -2^31 - 2^31 - 1
          • long占8字节,范围: -2^63 - 2^63-1
        • 浮点类型
          • float占4字节
          • double占8字节
        • 字符类型:char占2字节
      • boolean类型:占1位其值只有tue和fase两个。
    • 引用类型
      • 接口
      • 数组
java
public class Demo02 {
    public static void main(String[] args) {
        // 八大基本数据类型
        
        // 整数
        int num1 = 10;  // 最常用
        byte num2 = 20;
        short num3 = 30;
        long num4 = 40L; // Long类型要在数字后面加L

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

        // 字符类型
        char name = 'A';

        // 字符串,String不是关键字,类
        String names = "lazy";

        // 布尔值
        boolean flag = true;
        boolean flag2 = false;
    }
}
  • 什么是字节
    • 位(bit):是计算机内部数据储存的最小单位,11001100是一个八位二进制数。
    • 字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示,1B(byte字节)=8bit(位)。
    • 字符:是指计算机中使用的字母、数字、字和符号。
      • 1bit表示1位
      • 1Byte表示一个字节1B=8b
      • 1024B=1KB
      • 1024KB=1M
      • 1024M=1G

数据类型扩展及面试题

java
public class Demo03 {
    public static void main(String[] args) {
        // 整数拓展:    进制      二进制0b   十进制     八进制0    十六进制0x

        int i=10;
        int i2 = 010;   // 八进制0
        int i3 = 0x10;  // 十六进制0x

        System.out.println(i);  // 10
        System.out.println(i2); // 8
        System.out.println(i3); // 16

        System.out.println("-------------------------------------");
        //************************************************
        // 浮点数拓展
        // BigDecimal   数据工具类
        // float 有限     离散      舍入误差    大约  接近但不等于
        // 最好完全使用浮点数进行比较

        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

        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   2字节    0 - 65536   Excel

        char c3 = '\u0061';

        System.out.println(c3); // a

        // 转义字符
        // \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){}      // 老油条
        
        // 代码要精简易读
    }
}

5.类型转换

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

    java
    ------------------------------------------------>
    byte -> short -> char -> int -> long -> float -> double
  • 运算中,不同类型的数据先转化为同一类型,然后进行运算。

java
public class Demo04 {
    public static void main(String[] args) {
        int i = 128;
        byte b = (byte)i;   // 内存溢出
        double b1 = i;

        // 强制转换     (类型)变量名     高--低
        // 自动转换     低--高

        System.out.println(i);
        System.out.println(b);
        System.out.println(b1);

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

        System.out.println("++++++++++++++++++++++++++++++++++++");

        System.out.println((int)123.7);
        System.out.println((int)-45.89f);

        System.out.println("=======================");
        char a = 'a';
        int c = a+1;

        System.out.println(c);  // 98
        System.out.println((char)c);    // b

    }
}
  • 常见问题
java
public class Demo05 {
    public static void main(String[] args) {
        // 操作比较大时,注意溢出
        // JDK7新特性,数字之间可以用下划线分割
        int money = 10_0000_0000;
        System.out.println(money);

        int years = 20;
        int total = money*years;    //  -1474836480  计算时溢出
        System.out.println(total);

        long total2 = money*years;
        System.out.println(total2);    // 默认是int,转换之前已经存在问题了!!!

        long total3 = money*(long)years;
        System.out.println(total3);     // 20000000000

    }
}

6.变量与常量

  • 变量:可以变化的量。
  • Java是一种强类型语言,每个变量都必须声明其类型。
  • Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。
  • 每个变量都有类型,类型可以是基本类型,也可以是引用类型;
  • 变量名必须是合法的标识符;
  • 变量声明是一条完整的语句,因此每一个声明都必须以分号结束。
java
public class Demo06 {

    static int allClicks = 0;   // 类变量
    String str = "hello world"; // 实例变量

    public void method(){
        int i = 0;  // 局部变量
    }

    public static void main(String[] args) {
        // int a,b,c;
        // int a=1,b=2,c=3;
        String name = "wahaha";
        char x = 'X';
        double pi = 3.14;

    }
}
java
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 Demo08();
        Demo07 demo07 = new Demo07();
        System.out.println(demo07.age);
        System.out.println(demo07.name);

        // 类变量 static
        System.out.println(salary);

    }

    // 其他方法
    public void add(int i){
        System.out.println(i);
    }
}
  • 常量( Constant):初始化( initialize)后不能再改变值!不会变动的值;
  • 所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
  • 常量名一般使用大写字符。
java
public class Demo08 {
    
    // 修饰符,不存在先后顺序
    static final double PI = 3.14;

    public static void main(String[] args) {
        System.out.println(PI);
    }
}
  • 变量的命名规范
    • 所有变量、方法、类名:见名知意;
    • 类成员变量:首字母小和驼峰原则:monthSalary;
    • 局部变量:首字母小写和驼峰原则;
    • 常量:大写字母和下划线:MAX_VALUE;
    • 类名:首字母大写和驼峰原则:Man, GoodMan;
    • 方法名:首字母小写和驼峰原则:run(),runRun()。

7.基本运算符

Java语言支持如下运算符:

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

public class Demo01 {
    public static void main(String[] args) {
        // 二元运算符
        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(a/b);
        System.out.println(a/(double)b);
    }
}
java
package github.demo01;

public class Demo02 {
    public static void main(String[] args) {
        long a = 123123123123123L;
        int b = 123;
        short c = 10;
        byte d = 8;

        System.out.println(a+b+c+d);
        System.out.println(b+c+d);
        System.out.println(c+d);
    }
}
java
package github.demo01;

public class Demo02 {
    public static void main(String[] args) {
        long a = 123123123123123L;
        int b = 123;
        short c = 10;
        byte d = 8;

        System.out.println(a+b+c+d);
        System.out.println(b+c+d);
        System.out.println(c+d);
        System.out.println((double)c+d);
    }
}
java
package github.demo01;

public class Demo03 {
    public static void main(String[] args) {
        // 关系运算符返回的结果

        int a = 10;
        int b = 20;
        int c = 21;

        System.out.println(c%a);    // c / a 的余数

        System.out.println(a>b);
        System.out.println(a<b);
        System.out.println(a==b);
        System.out.println(a!=b);
    }
}

8.自增自减运算符、初识Math类

java
package github.demo01;

public class Demo04 {
    public static void main(String[] args) {
        // ++ -- 自增,自减  一元运算符
        int a = 3;

        int b = a++;    // 执行完这一行代码后,先给b赋值,再自增
        System.out.println(a);
        int c = ++a;    // 执行完这一行代码前,先自增,再给c赋值

        System.out.println(a);
        System.out.println(b);
        System.out.println(c);

        // 幂运算 2^3
        double pow = Math.pow(2,3);
        System.out.println(pow);

    }
}

9.逻辑运算符、位运算符

java
package github.demo01;

public class Demo05 {
    // 逻辑运算符
    public static void main(String[] args) {
        // 与(and)   或(or)   非(取反)
        boolean a = true;
        boolean b = false;

        System.out.println("a && b:" + (a && b));   // 逻辑与:两个变量都为真,结果才为true
        System.out.println("a || b:" + (a || b));   // 逻辑或:两个变量有一个为真,则结果才为true
        System.out.println("!(a && b):" + !(a && b));   // 取反:如果是真,则变为假;如果是假,则变为真

        // 短路运算
        int c = 5;
        boolean d = (c<4)&&(c++<4);
        System.out.println(d);
        System.out.println(c);

    }
}
java
package github.demo01;

public class Demo06 {
    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

        2*8 = 16
        << *2
        >> /2

         */

        System.out.println(2<<3);
    }
}

10.三元运算符

java
package github.demo01;

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

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

        System.out.println(a);

        // 字符串连接
        System.out.println(""+a+b);

        System.out.println(a+b+"");
        
    }
}
java
package github.demo01;

public class Demo08 {
    public static void main(String[] args) {
        // 三元运算符
        // x ? y : z
        // 如果x==true,则结果为y,否则结果为z

        int score = 80;
        String type = score < 60 ? "不及格" : "及格";
        System.out.println(type);
        
    }
}

11.包机制

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

12.JavaDoc

  • javadoc命令是用来生成自己API文档的。
  • 参数信息
    • @ author作者名
    • @ version版本号
    • @ since指明需要最早使用的jdk版本
    • @ paran参数名
    • @ return返回值情况
    • @ throws异常抛出情况
java
package github.demo01;

public class Doc {
    
    String name;

    /**
     * @author 
     * @param name
     * @return
     * @throws Exception
     */
    public String test(String name) throws Exception{
        return name;
    }
}
java
javadoc -encoding UTF-8 -charset UTF-8 Doc.java