Day02 JavaSE基础(前言+基础语法)

JavaSE 基础


Java 前言

Java 特性

Java建立在C++的基础上,但剥离了C/C++中比较复杂的东西,故有以下特性:

  • 语法像C
  • 没有指针
  • 没有内存管理(可自行释放,不过速度较慢)
  • 真正的可移植性,编写一次,到处运行(借助于JVM虚拟机)Write once, run anywhere.
  • 面向对象
  • 类型安全
  • 高质量的类库
  • 高性能、分布式、动态性(反射机制)、多线程、健壮性

Bill Gates说:这是迄今为止设计最好的语言!

Java三大版本:

JavaSE、JavaME、JavaEE

Java的JDK、JRE、JVM
  1. JDK: Java Development Kit 开发必须,内包含JRE
  2. JRE:Java Runtime Environment 运行时环境
  3. JVM: Java Virtual Machine 在任何系统上模拟了CPU,Java的跨平台的核心就是由于JVM
Java 的安装配置

安装jdk1.8–>配置环境变量–>配置path变量–>检查是否成功

java -version

若打印成功,则安装成功。

Java程序运行机制
  • 编译型语言

    类似于将整本中文书翻译成外文的,常用与操作系统的开发

  • 解释型语言

    类似于请一个翻译一句一句翻译,常用于网页

运行机制:源程序(.java文件)–> Java编译器 --> 字节码(.class文件)–> 类装载器 --> 字节码校验器 --> 解释器 --> 操作系统平台

编译软件选择 IDEA


Java基础语法

1 注释
  • 单行注释

    //面向世界的第一声呐喊!
    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) {
            /*
           		我是多行注释,可以注释一段文字
           		输出一个Hello,World!
           	*/
            System.out.println("Hello World");
        }
    }
    
  • 文档注释

    public class HelloWorld {
        /**
         * @Description HelloWorld
         * @Author Jever Demut
         */
        public static void main(String[] args) {
            System.out.println("Hello World");
        }
    }
    
2 标识符
  • 关键字(不可用做变量名)
    Java关键字

  • 标识符

    标识符要求:

    1. 所有的标识符都应该以A-Z、a-z、$或_开始

    2. 首字符之后可为字母、$ 或 _ 数字的任意组合

    3. 不能使用关键字作为变量名或方法名

    4. 大小写敏感

3 数据类型
  • 强类型语言 – Java

    所有变量都必须先定义后才能使用(比较安全,但是较慢)

  • 弱类型语言

    比较随意,但是安全性不敢保证

  • Java数据类型分为基本类型和引用类型

    • 基本类型(primitive type)
      1. 数值类型
        • 整数类型:byte、short、int、long(‘L’加以区分); 补充:1B = 8 bit
        • 浮点类型:float('F’加以区分)、double;
        • 字符类型:char(‘a’)
      2. boolean类型:true、false;
    • 引用类型(reference type)
  • 数据类型扩展(!!!)

    public class Demo01 {
        public static void main(String[] args) {
            //整数拓展:  进制  二进制0b  十进制   八进制0   十六进制0x
            int x1 = 10;
            int x2 = 010;
            int x3 = 0x10;
            System.out.println(x1);//10
            System.out.println(x2);//8
            System.out.println(x3);//16
    
            System.out.println("======================================");
    
            //浮点数扩展
            //银行业务如何表示? money
            // !!! 使用BigDecimal 数学工具类
            //float、double均是有问题的
            /*
                float 是有限的、离散的  包含舍入误差,接近但是不等于
             */
            //最好不使用浮点数进行比较
            float f = 0.1f; //0.1
            double d = 1.0/10; //0.1
            System.out.println(f==d); //false
    
            float d1 = 213243546576654f;
            float d2 = d1 + 1;
            System.out.println(d1 == d2); //true
    
            System.out.println("=====================================");
    
            //字符扩展  所有字符本质是数字; Unicode 0-65536 (U0000-UFFFF)
            char c1 = 'a';
            char c2 = '中';
            System.out.println(c1);  //a
            System.out.println((int)c1); //97 because:强制转换
            System.out.println(c2); //中
            System.out.println((int)c2); //20013
    
            char c3 = '\u0061'; //Unicode 编码
            System.out.println(c3); //a
    
            System.out.println("=====================================");
    
            //转义字符
            //\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  new创建的对象不进入字符串池,故false
            String sc = "hello world";
            String sd = "hello world";
            System.out.println(sc == sd); //true  sc进入字符串池,sd创建时在池子查找并匹配到sc的位置,故true
    
            //布尔值扩展
            boolean flag = true;
            if(flag){ //等价于if(flag==true)
                System.out.println("Less is More!");
            }
        }
    }
    
4 类型转换

所有变量的运算均是先转换为同一种类型,再运算,故有时需要类型转换。

顺序:

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

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

    需要避免内存溢出

    //此处展示强制转换且内存溢出案例
    public class Demo02 {
        public static void main(String[] args) {
            int i = 128;
            double d = (byte)i;
            System.out.println(i); //128
            System.out.println(d); //-128.0
        }
    }
    
  • 自动转换(低 --> 高)

    不需要括号

    //此处展示自动转换案例
    public class Demo02 {
        public static void main(String[] args) {
            int i = 128;
            double d = i;
            System.out.println(i); //128
            System.out.println(d); //128.0
        }
    }
    
  • 转换注意:

    1. 不能对布尔值进行转换
    2. 不能把对象类型转换为不相干的类型
    3. 在把高容量转换为低容量是,强制转换
    4. 转换时可能存在内存溢出或者精度问题!
  • 补充案例:

    public class Demo02 {
        public static void main(String[] args) {
            //JDK7新特性,数字之间可以用下划线分割
            int money = 10_0000_0000;
            int years = 20;
            int total = money*years;
            long total2 = money*years;
            long total3 = money*(long)years; //先把一个数准换为long,结果也就为long
            System.out.println(total); //-1474836480
            System.out.println(total2); //-1474836480 因为是在计算后才转换,故仍然为之前的数
            System.out.println(total3); //20000000000 输出正常
        }
    }
    
5 变量与常量
  • 每个变量必须声明其类型

    type varName = Value;
    
  • 变量作用域

    • 类变量:随类生,随类消亡
    • 实例变量:从属于对象;通过类才能使用,若为初始化,则会自行使用默认值;
    • 局部变量:尽在{}中生存

    变量案例:

    public class Demo03 {
        //类 = 属性(变量) + 方法
    
        //类变量 static 随类生,随类消亡
        static double salary = 18000;
    
        //实例变量: 从属于对象;通过类才能使用,若为初始化,则会自行使用默认值:1)布尔值:默认false; 2)除了基本类型,其余默认值均为null
       
        String name;
        int age;
    
        //main 方法
        public static void main(String[] args) {
    
            //局部变量:必须声明和初始化值
            int i = 10;
            System.out.println(i);
    
            //实例变量  varName = new Demo03();
            Demo03 demo03 = new Demo03();
            System.out.println(demo03.name); //null
            System.out.println(demo03.age); //0
    
            //类变量 static 从属于类
            System.out.println(salary); //18000.0
        }
    }
    
  • 常量

    使用static final创建:

    public class Demo04 {
    
        //final代表常量,static意味类变量,随类生,随类消亡。
        //修饰符,不存在先后顺序
        static final double PI = 3.14;
        public static void main(String[] args) {
            System.out.println(PI);
        }
    }
    
  • 变量命名规范

    • 所有变量、方法、类名:见名知意
    • 类名:首字母大写和驼峰原则:Male, GoodMale
    • 类成员变量:首字母小写和驼峰原则:monthSalary、lastName、firstName
    • 局部变量:首字母小写和驼峰原则
    • 常量:大写字母和下划线:MAX_VALUE
    • 方法名:首字母小写和驼峰原则:runRun()
6 运算符(内含多道面试题,易错多回顾)
  • 算数运算符: + - * / % ++ –

    package operator;
    // 关于计算中的类型转化问题
    public class Demo01 {
        public static void main(String[] args) {
            long a = 123245768324566787L;
            int b = 234;
            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
          	System.out.println(c%d); // 2  取余运算
        }
    }
    
    package operator;
    //关于++ -- 的使用,另扩充幂运算方法
    public class Demo03 {
        public static void main(String[] args) {
            //++ -- 自增 自减  一元运算符
            int a = 3;
            int b1 = a++; //   b1 = a --> a = a+1
            int b2 = ++a; //   a = a+1 --> b2 = a
    
            int c1 = a--; //   c1 = a --> a = a-1
            int c2 = --a; //   a = a-1 --> c2 = a
    
            System.out.println(a);
            System.out.println(b1);
            System.out.println(b2);
            System.out.println(c1);
            System.out.println(c2);
    
            // 幂运算 2^10  使用数学工具类操作
            double pow = Math.pow(2, 10);
            System.out.println(pow);
    
        }
    }
    

    注: 切记a++与++a的计算过程

  • 赋值运算符:=

  • 关系运算符:> < >= <= == != instanceof(类型判断)

    package operator;
    //关系运算符的一些判断语句,返回true 或 false
    public class Demo02 {
        public static void main(String[] args) {
            int a = 10;
            int b = 20;
            
            System.out.println(a>b); //false
            System.out.println(a<b); //true
            System.out.println(a==b); //false
            System.out.println(a!=b); //true
        }
    }
    
  • 逻辑运算符:&& || !(非)

    package operator;
    //逻辑运算符
    public class Demo04 {
        public static void main(String[] args) {
            // and or not
            boolean a = true;
            boolean b = false;
    
            System.out.println("a && b: "+(b&&a)); //false 短路运算,前若为假,则后面语句不判断
            System.out.println("a || b: "+(a||b)); // true
            System.out.println("!(a && b): "+!(a&&b)); //true
    
        }
    }
    

    注:再次强调&&为短路运算。

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

    package operator;
    
    //位运算符, 内含面试题
    public class Demo05 {
        public static void main(String[] args) {
            /*
            A = 0011 1100
            B = 0000 1101
    
            A&B = 0000 1100
            A|B = 0011 1101
            A^B = 0011 0001  上下对应位数字不相同时才为1: 0^1 = 1 or 1^0 = 1
            ~B = 1111 0010
    
            //面试题
            2*8 = 16 如何计算最快?
            <<
            >>
            //直接用位运算,效率极高,因为是和底层打交道
            0000 0000 0
            0000 0010 2
            0000 0100 4
            0000 1000 8
            0010 0000 16
    
             */
            System.out.println(2<<3); //16
        }
    }
    

    注:位运算不经常接触,但是效率极高。

  • 条件运算符: ? :

    package operator;
    
    public class Demo06 {
        public static void main(String[] args) {
            int a = 10;
            int b = 20;
            //字符串连接符  + ,String
            System.out.println("" +a+b); //1020
            System.out.println(a+b+""); //30
    
            //三元运算符
            // x?y:z
            //if x is true, get y, else get z;
            int score = 80;
            String type = score < 60?"不及格":"及格";
            System.out.println(type);
        }
    }
    

    注:强调字符串连接时+号的使用(一道面试题)以及?:的实质意义

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


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值