java基础

Java的特性优势

  • 简单性
  • 面向对象
  • 可移植性
  • 高性能
  • 分布式
  • 动态性 【反射机制】
  • 多线程
  • 安全性 【异常机制】
  • 健壮性

java三大版本

  • write once 、run anywhere
  • javaSE:标准版 【桌面程序、控制台开发....】
  • javaME:嵌入式开发【手机,小家电....】 用的人很少了
  • javaEE:E企业级开发【web端,服务器开发.....】

JDK JRE JVM

JVM ---》 JRE ---》 JVM

java程序运行机制

  • 编译型: 把程序全部翻译成计算机可以执行的语言 compile 编译器

  • 解释性: 边执行边解释

  • 程序运行机制:

    • 源程序(.java)---》 java编译器---》字节码(.class) ---》

      类装载器---》字节码检验器---》解释器----》操作系统平台

标识符

  • java标识符大小写敏感;
  • java标识符只能以字母 $ _ 开头

数据类型

  • 强类型语言

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

  • 弱类型语言

浮点数

float f = 0.1f;
double d = 1/10;
System.out.println(f==d);//fasle

float d1 = 23232323231f;
float d2 = d1+1;
System.out.println(d1==d2);//true
  • float 有限 离散 舍入误差 大约 接近但不等于
  • double
  • 最好完全避免使用浮点数进行比较
  • BigDecimal 类 数学用具类 大数据类 【用这个】

字符

char c1 ='a';
char c2 = '中';
System.out.println(c1);// a
System.out.println((int)c1);// 97  强制类型转换
//所有的字符本质还是数字
//编码 Unicode 有表:(97 = a  65 =A) 2字节  0 - 65526
// U0000 UFFFF
char c3 = '\u0061'
System.out.println(c3);// a

//转义字符
// \t 制表符
// \n 换行符
System.out.println("Hello\tworld");
System.out.println("Hello\nworld");

//看一个e.g.
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

类型转换

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

    低 ---------------------到----------------------高

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

  • 强制类型转换 高 赋值 到 低 [会有内存溢出 和 精度 问题]

  • 自定类型转换 低 赋值 到 高

int i = 128;
byte  b = (int) i;//内存溢出  -128

double d = i;

//操作比较大的输的时候。注意溢出问题
int money = 10_0000_0000;//JDK7 新特性 数字之间可以用下划线分割
int years = 20;
int total = money * years; // -147483648,计算的时候溢出了
long total2 = money * years;//默认是int 转换之前还是int 就有问题了
 
long  total3 = money * ((long)years);//先把一个数转化为long  √

变量

变量作用域

  • 类变量 必须有static
  • 实例变量
  • 局部变量

常量

  • 用final来定义 一般名大写

运算符

  • 算术运算符 : + - * / % ++ --
		int e = 3;
        int f = e++; //执行这行代码,先给f赋值,在自增
        System.out.println(e);//4
        int g = ++e;//执行这行代码,先自增,后给g赋值
        int h = e++;//先赋值,在自增
        System.out.println(e);//6
        System.out.println(f);//3
        System.out.println(g);//5
        System.out.println(h);//5

		// 字符串连接符   +    
		int a = 10;
		int b = 20;
        System.out.println(""+a+b);//1020
        System.out.println(a+b+"");//30
  • 赋值运算符 : =
  • 关系运算符 : > < >= <= == != instanceof
  • 逻辑运算符 : && || ! 与或非

[注:] &&: 有0 返回 || : 有 1 返回 --------- 短路机制

  • 位运算符 : & | ^ ~ >> << >>>(了解)
 System.out.println(2<<4);//<<左移乘2  >>右移除2
  • 条件运算符 : ? :
  • 扩展赋值运算符: += -= *= /=

JavaDos

    /**
     * @author shuang 作者
     * @version 1.0  版本号
     * @since 1.8  指明需要最早使用的JDK版本
     * @param in  参数名
     * @return 返回值情况
     * @throws   异常抛出情况
     */
    public String test(String in){
        return in;
    }
>javadoc  -encoding utf-8 -charset  utf-8 Doc.java
1、在cmd中运行上面命令会生成在线文档 点击index.html 可查看
2、也可以用IDEA生成javaDoc文档

Java流程控制

Scanner对象

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("第一次输入数据:");//hei baby
        // nextLine输出回车之前的数据  以回车分割
        String str = scanner.nextLine();
        System.out.println(str);//hei baby   
        System.out.println("第二次输入数据:");//hello  world
        // next输出空格之前的数据  以空格分割
        str = scanner.next();
        System.out.println(str);//hello
        scanner.close();
    }

示例:

    public static void main(String[] args) {
        //输入多个数字 求总和 平均值 每输入一个数字回车,通过非法数字来结束输入输出执行结果
        Scanner scanner   = new Scanner(System.in);
        double sum = 0;
        int m = 0;
        System.out.println("请输出数据:");
        while (scanner.hasNextDouble()){
            double x =  scanner.nextDouble();
            m++;
            sum+=x;
            System.out.println("输入了第【"+m+"】个数据 当前总和为:"+sum);
        }
        System.out.println(m+"个数总和:"+sum);
        System.out.println(m+"个数平均值:"+(sum/m));
        scanner.close();
    }

结果:

请输出数据:
36
输入了第【1】个数据 当前总和为:36.0
42
输入了第【2】个数据 当前总和为:78.0
7.6
输入了第【3】个数据 当前总和为:85.6
a
3个数总和:85.6
3个数平均值:28.53333333333333

顺序结构

  • def:语句与语句之间是按从上到下的顺序进行的,它是由若干依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构

选择结构

  • if单选择结构
if(布尔表达式){
    // 布尔表达式为true
}
  • if双选择结构
if(布尔表达式){
    // 布尔表达式为true
}else{
    // 布尔表达式为false
}
  • if多选择结构
if(布尔表达式1){
    // 布尔表达式1为true
}else if(布尔表达式2){
    // 布尔表达式2为true
}else if(布尔表达式3){
    // 布尔表达式3为true
}else if(布尔表达式4){
    // 布尔表达式4为true
}else{
    // 以上布尔表达式都不为true 执行代码
}

示例:

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入成绩:");
        int score = scanner.nextInt();
        if (score == 100){
            System.out.println("恭喜~~满分~~");
        }else if (score >= 90 && score < 100){
            System.out.println("A级");
        }else if (score >= 80 && score < 90){
            System.out.println("B级");
        }else if (score >= 70 && score < 80){
            System.out.println("C级");
        }else if (score >= 60 && score < 70){
            System.out.println("D级");
        }else if (score >= 0 && score < 60){
            System.out.println("不及格");
        }else {
            System.out.println("成绩不合法!!!");
        }
        scanner.close();
    }

结果:

请输入成绩:
100
恭喜~~满分~~
  • switch多选择结构
switch(expression){
    case value:
        //语句
        break;//可选
    case value:
        //语句
        break;//可选
    case value:
        //语句
        break;//可选
    default://可选
        //语句
}
//注: case标签 必须为 字符串常量或字面量 
//了解一下反编译    java ---- 字节码  ---- 反编译(IDEA) --- java

反编译(IDEA)示例

查看工程结构 projectStructure --- project ---project compiler output

可以找到.class文件 --- 右键任意文件 --- show in explorer(打开目录) ---

把.class文件拷贝到此目录下 --- IDEA把字节码反编译为java

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package struct;

public class Demo03 {
    public Demo03() {
    }

    public static void main(String[] args) {
        char grade = 108;
        switch(grade) {
        case 65:
            System.out.println("优秀");
            break;
        case 66:
            System.out.println("良好");
            break;
        case 67:
            System.out.println("及格");
            break;
        case 68:
            System.out.println("很差");
            break;
        case 69:
            System.out.println("挂科");
            break;
        default:
            System.out.println("未知等级!");
        }
    }
}

循环结构

  • while循环
while(布尔表达式){
    //布尔表达式true
}
//注:大多数情况会让循环停止下来,需要让表达式失效方式来结束循环;

示例:

    public static void main(String[] args) {
        // 1-100 求和
        int i = 0;
        int sum = 0;
        while (i<100){
            i++;
            sum = sum + i;
        }
        System.out.println(sum);//5050
    }
  • do while 循环

do whlile 和 while 相似,不同的是 do while 循环至少执行一次

do{
    //代码语句
}while(布尔表达式)

IDEA快捷键

  • ctrl + D 复制当前行到下一行