zoukankan      html  css  js  c++  java
  • Java SE(3)

    紧接着上一期内容,继续来复习一下java基础的知识点,主要来复习一下有关线程的内容吧!

    1.向上转型:Animal a = new Cat();//自动类型提升,猫对象提升为动物类型,但是特有的功能无法访问。作用:就是限制对象的特有功能的访问。

    向下转型:紧着着Animal a = new Cat();  Cat c = (Cat)a; 如果还想用具体动物猫的特有功能,可以将该对象向下转型。向下转型的目的是:为了使用子类的特有功能

    注意:对于转型,自始至终都是子类对象在做着类型的变化

    2.instanceof:为了更准确鉴别一个对象的真正类型,只能用于引用数据类型的判断,而instanceof通常在向下转型前用于健壮性的判断。

    3.多态3个特点:

    (1)成员变量 :

    编译时:参考引用变量所属的类中是否有调用的成员变量,有,编译通过,没有,编译失败。运行时:参考引用变量所属的类中是否有调用的成员变量,并运行该所属的类中的成员变量。简单说:编译和运行都参考的是等号左边  (Fu f = new Zi();)

    (2)成员函数:

    编译时,参考引用变量所述的类中是否有调用的函数,有,编译通过;没有,编译失败。运行时,参考的是对象所属的类中是否有调用的函数。简单说:编译看左边,运行看右边。

    (3)静态函数:

    编译、运行都看参考引用变量所属的类中是否有调用静态方法,简单说:编译运行都看左边。对于静态函数,不需要对象,只要用类名调用即可

    (内部类)

    4.内部类访问特点:(1)内部类可以直接访问外部类中的成员(包括外部类中的私有成员)  (2)外部类要访问内部类,必须在外部类中,建立内部类的对象

    当分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述事物内容。这时就把还有的事物定义成内部类来描述

    5.内部类中如果定了静态成员,则该内部类也必须是静态的。

    6.为什么内部类能够直接访问外部类成员?

    那是因为内部类持有了外部类的引用。外部类名.this

    7.内部类在局部位置上只能访问局部中被final修饰的局部变量

    8.匿名内部类:就是内部类的简写(其本质就是一个匿名子类对象)。必须有前提:内部类继承或实现一个外部类或者接口

    9.error与Exception的区别:

    Error :由JVM抛出多的严重性问题,一般不可处理,这种问题的发生一般不采取针对性处理-直接修改程序,而是系统底层错误问题。

    Exception:异常,是一般性问题。

    (线程)

    10.什么是程序?什么是进程?什么是线程?

    程序:是在设备上的可执行文件     进程:正在运行的程序,是程序动态的执行过程(动起来的程序)   线程:进程内部单一的顺序控制流     并发:操作系统将时间划分为很多时间片段,均匀的分配给正在运行的程序,微观上走走停停,宏观上都在运行,这现象叫并发。

    11.多线程:指同一进程中,并发执行的多个子程序流。当JVM启动时,就启动了多线程,至少有两个线程启动,一个是执行main函数的主线程,另一个是垃圾回收的线程

    12.创建线程的目的是什么? 是为了开辟一条执行路径,去执行指定的代码和其他代码实现同时运行。

    13.Java中建立线程有两种方法:(1)一种是继承Thread类,重写run()方法  (2)实现Runnable接口,并通过Thread和实现Runnable的类建立线程 。

    14.实现Runnable接口的好处:(1)将线程的任务从线程的子类中分离出来,进行了单独的封装,按照面向对象的思想将任务封装成对象。  (2)避免了Java单继承的局限性(注意:在使用多线程时一定要考虑线程的安全问题)

    15.线程安全问题产生的原因?(1)多个线程在操作共享的数据 (2)操作共享数据的线程代码有多行

    16.当一个线程在执行操作共享数据的多条代码过程中,其他线程参与了运算就会导致线程安全问题的产生。 

    解决思路:就是将多条操作共享数据的线程代码封装起来,当有线程在执行这些代码的时候,其他线程不可参与运算。必须要当前线程把这些代码都执行完毕后,其他线程不可参与运算。

    (1)在Java中,用同步代码块就可以解决这个问题

    同步代码块格式:    synchronized(对象){

                需要被同步的代码块

              }

    同步的好处:解决了线程的安全问题

    同步的弊端:会相应降低效率,因为线程外的线程都会判断同步锁。

    同步的前提:同步中必须有多个线程并使用同一把锁

    (2)同步函数:同步函数使用的锁是固定的this

    17.同步函数与同步代码块的区别?

    同步函数使用的锁是固定的this。同步代码块使用的锁是任意的对象(建议使用)

    18.静态的同步函数使用的琐是:该函数所属字节码文件对象,可以用getclass()方法获取,也可用当前类名.class表示。

    勤能补拙是良训,一分辛苦一分才!我们一起努力!
  • 相关阅读:
    JavaScript进阶系列06,事件委托
    JavaScript进阶系列05,事件的执行时机, 使用addEventListener为元素同时注册多个事件,事件参数
    JavaScript进阶系列04,函数参数个数不确定情况下的解决方案
    JavaScript进阶系列03,通过硬编码、工厂模式、构造函数创建JavaScript对象
    JavaScript进阶系列02,函数作为参数以及在数组中的应用
    JavaScript进阶系列01,函数的声明,函数参数,函数闭包
    委托、Lambda表达式、事件系列07,使用EventHandler委托
    委托、Lambda表达式、事件系列06,使用Action实现观察者模式,体验委托和事件的区别
    委托、Lambda表达式、事件系列05,Action委托与闭包
    委托、Lambda表达式、事件系列04,委托链是怎样形成的, 多播委托, 调用委托链方法,委托链异常处理
  • 原文地址:https://www.cnblogs.com/pingfan21/p/4924697.html
Copyright © 2011-2022 走看看