zoukankan      html  css  js  c++  java
  • 语法.一

    面向对象三大基本特征:继承、封装、多态。
    面向对象:具备三大特征
    基于对象:只使用封装这个特性。

    继承:大类和小类的关系(父与子),是一种is a关系, 小类 is 大类
    组装:整体和部分的关系。has a

    java支持 基本数据类型 和 引用数据类型
    基本数据类型:
    boolean(1位)
    byte(1) short(2) int(4) long(8) char(2) float(4) double(8)
    引用数据类型
    类、接口、数组
    null只和引用类型有关

    java默认数据类型为int, 当超过时,java并不会默认按long操作,需要的话,在数值后面加L
    八进制:0开头 十六进制0x
    java7新增二进制数,0b或0B开头

    ‘uxxxx',直接使用unicode值定义char变量

    java默认浮点数位double
    想要为float,可以在数值末尾家f或F,也可以用D或d来说明是double,没必要.

    --------------------------------------
    java定义类的语法
    [修饰符] class 类名
    {
        零到多个构造器定义;
        零到多个Field;
        零到多个方法...
    }
    --------------------------------------
    Field定义语法(中文可以叫成员变量)
    [修饰符] Field类型 Field名 [=默认值]

    修饰符:修饰符可以省略,也可以为public protected private static final
        其中public protected private只能有一个
        final修饰的类:是最终类,即不能被当成父类。
    Field类型:Java允许的任何数据类型,包括基本类型和现在介绍的引用类型
    Field名:合法标识符
    默认值:可选的默认值
    --------------------------------------
    定义方法的语法格式
    [修饰符]  方法返回值类型 方法名 (形参列表)
    {
        //语句
    }

    修饰符:修饰符可以省略,也可以为public protected private static final abstract
        其中public protected private只能有一个, final abstract只能有一个
    方法返回值类型: Java允许的任何数据类型,没有为void
    方法名:合法标识符
    形参列表:

    static用于修饰方法或field,标识他是属于整个类的。
    --------------------------------------
    构造器定义
    [修饰符] 构造器名 (形参列表)
    {
        //语句
    }

    修饰符:修饰符可以省略,也可以为public protected private之一
    构造器名:必须与类名相同
    形参列表:
    注意:构造器不能定义返回值,也不能用void声明他无返回值。否则会被当成普通方法被定义。
    --------------------------------------
    对象的产生
    对象有构造器创建,通过new来调用对应某个构造器来创建这个类的实例

    Person p;
    p = new Person();

    this引用 对象自己
    static方法不能使用this 即静态成员不能访问非静态成员
    --------------------------------------
    对象引用.方法()
    类.方法() //用static修饰过的方法
    --------------------------------------
    可变形参: 方法,在最后一个形参的类型后面加三个点(...),表明该形参可以接受多个参数值。
                多个参数值被当作数组传入。    
    public void put(int a, String... books)
    {
        for (String temp : books)
        {
            System.out.println(temp);
        }
    }
    --------------------------------------
    重载
    两同一不同。
    同一个类中方法名相同,参数列表不同。
    --------------------------------------
    封装
    private(当前类访问权限)
    只能在类内部访问

    default(包访问权限)不使用任何修饰符时
    被相同包下的其他类访问

    protected(子类访问权限)

    public(公共访问权限)
                private        default        protected    public
    同一个类中      ok          ok          ok          ok
    同一个包中                ok          ok          ok
    子类中                            ok          ok
    全局范围内                                        ok

    --------------------------------------

    为了解决重名问题,包提供命名空间

    指定一个类在某个包下
    在第一个非注释行写下且一个文件中只能有一条这个语句
    package packagename;

    一旦指定后,位于这个文件中的所有类名的完整类名都应该是包和类名的组合。
    package lee;
    class MyClass
    {
        static public void main(String[] args)
        {
            System.out.println("this is MyClass\n");
        }
    }

    编译javac -d . MyClass.java (不使用-d 就不会生成相应的目录结构, 且java lee.MyClass也不行,必须手工创建lee目录)
    编译后,生成lee目录,目录下为MyClass.class
    java规定:位于包中的类,在文件系统中也必须要有与包名层次相同的目录结构。
    执行 java lee.MyClass

    加载过程
    虚拟机加载lee.MyClass时,它会依次搜索CLASSPATH环境变量所指定的系列路径,
    查找这些路径下是否包含lee路径。并在lee路径下查找是否包含MyClass.class文件。
    所以同一个包下的文件不一定放在一个地方,可以一个C盘,一个D盘,只要在CLASSPATH中,
    并且在lee下,就可以使用。

    使用其他包的类,必须加包前缀
    lee.sub.Apple a = new lee.sub.Apple();

    为了简化包前缀,引入了import
    import出现在package之后,类定义之前。
    一个文件可以有多个import
    例 import lee.sub.Apple;
    导入所有类
    import lee.sub.*;//注,子包内的类不会被导入。

    import不是万能的,如果两个包内的类文件同名,编译器就不能辨别要使用哪个包了
    这是只能使用带包前缀的类名。

    java默认为所有源文件导入java.long下的包
    --------------------------------------
    继承语法
    修饰符 class SubClass extends SuperClass
    {
        //类定义
    }

    注:子类不能获得父类的构造器(什么意思?)
    --------------------------------------
    方法覆盖(Override)
    原则:    两同两小一大
    两同:    方法名、形参列表相同
    两小:    子类的返回值类型应比父类返回值类型更小或相等
        子类方法声明抛出的异常应比父类方法声明抛出的异常更小或相等
    一大:    子类方法的访问权限应比父类的更大或相等。

    子类中访问被覆盖的父类方法可以用super关键字或父类类名作为调用者。
    父类总用private声明的,子类不能重写,即使写了同名函数,也只是定义了一个新函数。不是重写。

    方法重载(overload)和方法重写(override)
    重载:同一个类的多个同名函数(父类和子类也有可能发生重载,即子类定义与父类同名但形参列表不同的函数时)
    重写:子类和父类的同名函数
    --------------------------------------
    子类被构造时,必会调用父类构造器,分下面3种情况
    1.如果第一句用super显示构造函数,系统将根据参数列表调用父类构造函数。例 super(1)
    2.如果用this显示调用本类的另一构造函数,执行另一个构造函数时,会调用父类构造函数
    3.既没super调用,也没this调用,系统会在执行子类构造函数之前调用父类无参构造函数。
    --------------------------------------
    多态
    无虚拟方法的概念,直接就转化为子类的方法
    Base b = new Client();
    b.test();
    test是client的方法。(两者都定义了)

    强制类型转换
    基本数据类型:只能数据类型之间转换
    引用类型:只能有继承关系。将父转为子时,则运行时必须为子才行。(即Base b = new Client(); 这里Base可以)
          否则报 ClassCastException

    可以用intanceof来判断是否可以成功转换(要么对象和后面类型相同,要么具有父子继承关系)
    if ( obj instanceof ObjType )
    {
        ObjType o = (ObjType)obj;

    --------------------------------------
    初始化块 一个类据说只能有两块,但没必要,因为都会被执行到。
    普通初始化快,静态出事话块
    定义
    class
    {
        [修饰符] {
        }
        ...
    }

    修饰符时static是静态初始化块。(静态初始化化块是类相关的)

    先执行类的初始化(静态),然后是对象的初始化
    执行顺序
    base static init    父类静态初始化块    类初始化阶段
    Client static init    子类静态初始化块
    base init        父类初始化快        对象初始化阶段
    Base            父类构造体
    Client init        子类初始化块
    Client            子类构造体
    第二次创建
    base init
    Base 2
    Client init
    Client
    --------------------------------------

  • 相关阅读:
    推荐系统中MAP与nDCG的计算方法
    ES 数据库常见命令
    SpringBoot整合Guacamole教程
    Docker简易安装教程
    战地指挥官 寻路
    vue 使用 websocket
    e'charts 地图 + 背景旋转
    vue-seamless-scroll 好用的无缝滚动插件
    vue-countTo---简单好用的一个数字滚动插件
    vue-cli3.0 使用postcss-plugin-px2rem(推荐)和 postcss-pxtorem(postcss-px2rem)自动转换px为rem 的配置方法;
  • 原文地址:https://www.cnblogs.com/mmix2009/p/2614325.html
Copyright © 2011-2022 走看看