美文网首页
Java(基本概念)

Java(基本概念)

作者: 尼禄祭 | 来源:发表于2019-04-19 15:40 被阅读0次

    最近花了一周左右重新回顾了Java基础,深感路漫漫其修远兮,在此把个人认为有价值的点列出来,希望能加深记忆

    1.Java运行机制

    JAVA

    2.标识符命名规范

    • 见名知意
    • 类名、接口名:驼峰法(HelloWorld)
    • 变量名、方法名:首字母小写,后面每个单词首字母大写
    • 常量名:全部字母大写

    3.数据类型

    基本数据类型:byte short int long char boolean float double
    引用类型:如String

    基本类型转换(除Boolean):

    • 自动转换:容量小 >>> 容量大
      byte<short(char)<int<long<float<double

    • 强制转换:容量大 >>> 容量小(可能缺失精度)

    • 默认int类型为赋值的字面值类型
      当整数字面值没有超出byte、short、char取值范围时,可直接赋值

    • 多种数据类型混合运算,先转换成容量最大的那种数据类型再做运算


    4.运算符

    ^(异或) 两边只要不一样,结果为true

    &&(短路与) 效率更高(推荐)

    ll(短路或) 效率更高(推荐)


    5.控制语句

    switch()括号中的类型只能为int或String(byte short char可自转int)


    6.方法

    • 内存结构
    JVM

    堆内存和方法区内存各有一个。一个线程一个栈内存

    栈内存(Stack):存储方法体中的局部变量

    堆内存(Heap):存储new创建的对象

    方法区内存:存储代码片段、静态变量

    • 重载

    同一个类中,方法名相同,参数列表不同,构成重载

    • 递归(调用自身)
    public static int sum(int n){
            if(n==1){
                return 1;
            }
            return n*sum(n-1);
        }
    

    7.面向对象

    • 封装(属性加上private,通过settergetter方法 访问)
    • 继承 (子类继承父类除构造函数以外的所有数据,是方法覆盖与多态机制的前提)
    • 多态 (关键是理解Java程序有编译期与运行期两个阶段)

    8.发生方法覆盖(override/overwrite)的条件

    • 发生在具有继承关系的两个类之间
    • 相同的方法名、返回值类型、参数列表,只有方法体不同
    • 重写的方法不能比被重写的方法拥有更低的访问权限
    • 重写的方法不能比被重写的方法抛出更宽泛的异常
    • 私有方法不能被覆盖、静态方法不需要覆盖、构造方法不存在覆盖
    • 覆盖和成员变量无关

    9.static关键字

    • 静态变量:当所有对象都有这个属性、并且这个属性对应的值都是一样的,这时声明为静态变量
      静态变量在类加载时初始化,并且只初始化一次
    • 静态方法:一般工具类采用静态方法,方便调用
    • 静态代码块:static{},在类加载时执行。{}实例语句块,在构造方法调用之前执行

    10.super关键字

    定义:super指的是当前子类中的父类型特征

    JVM

    构造方法中的this与super:

    • this:构造方法调用构造方法
    • super:通过子类构造方法调用父类构造方法

    语法规则:一个构造方法第一行如果没有this(...)也没有显式去调用super(...),系统会默认第一行调用super()
    this与super的使用都是建立在对象的基础上,而static方法没有对象,所以不能用于static方法中


    11.final关键字

    final代表最终的、不可更改的

    final修饰的变量一旦赋值不可改变

    final修饰的方法无法被覆盖

    final修饰的类无法被继承


    12.抽象类(abstract)

    语法规则:

    • 无法被实例化
    • 虽然无法实例化,但抽象类也有构造方法,是用于子类调用的
    • 在抽象类中可定义抽象方法,抽象方法没有方法体
    • 一个非抽象类继承抽象类,必须将父类中的抽象方法覆盖

    13.接口(interface)

    语法规则:

    • 接口中只能出现常量(public static final)、抽象方法(public abstract),括号内容可直接省略
    • 一个类可以实现多个接口
    • 接口与接口之间,可多继承
    • 一个非抽象类实现接口,必须将接口中所有方法实现(implements)

    接口的作用:

    • 可以使项目分层,所有层都面向接口开发,提升开发效率
    • 接口使代码之间的耦合度降低,变得“可插拔”

    For Example:

    从以下代码可以发现,ServiceImpl与Test面向接口编程,互相分离

    Engine.java(Service)

    public interface Engine {
        void start();
    }
    

    Honda.java/YAMAHA.java/.....(ServiceImpl)

    public class Honda implements Engine {
        @Override
        public void start() {
            System.out.println("Honda!!!");
        }
    }
    
    public class YAMAHA implements Engine {
        @Override
        public void start() {
            System.out.println("YAMAHA!!!!!");
        }
    }
    

    Car.java(Test)

    public class Car {
        private Engine e;
    
        public Car(Engine e){
            this.e=e;
        }
    
        public void drive(){
            e.start();
        }
    }
    

    14.异常(Exception)

    语法规则:

    • throws(抛出异常,跟在方法名后),将异常推卸给上层
    • try(可能会抛出异常的代码)...catch(具体异常)...finally(必定执行的代码),将异常捕捉并解决
    • getMessage()返回异常关键信息,printStackTrace()返回异常的详细信息

    For Example:自定义异常与手动抛出异常

    IllegalText.java(自定义异常类)

    public class IllegalText extends Exception {
        //定义异常一般提供两个构造方法
        public IllegalText(){}
        public IllegalText(String msg){
            super(msg);
        }
    }
    

    CustomService.java(相关业务类)

    public class CustomService {
        public void register(String name) throws IllegalText{
            if(name.length()<6){
                IllegalText e = new IllegalText("长度底于6!");
                throw e;
            }
            System.out.println("格式通过!");
        }
    }
    

    Test.java(测试类)

    public class Test {
        public static void main(String[] args) {
            String name="jack";
            CustomService cs=new CustomService();
            try{
            cs.register(name);
            }catch(IllegalText e){
                System.out.println(e.getMessage());
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:Java(基本概念)

          本文链接:https://www.haomeiwen.com/subject/hltcgqtx.html