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
    --------------------------------------

  • 相关阅读:
    强化学习的基本迭代方法
    基于文本描述的事务聚类
    学习强化学习之前需要掌握的3种技能
    其它 华硕 ASAU S4100U 系统安装 win10安装 重装系统 Invalid Partition Table 解决
    数据分析 一些基本的知识
    Python 取样式的内容 合并多个文件的样式 自定义样式
    电商 Python 生成补单公司需要的评论格式3
    SpringBlade 本地图片上传 生成缩略图
    SQL Server 字符串截取
    SpringBlade 本地图片上传
  • 原文地址:https://www.cnblogs.com/mmix2009/p/2614325.html
Copyright © 2011-2022 走看看