构造方法

如何获取子线程的执行结果

不想你离开。 提交于 2020-01-09 16:43:29
前言 博主以前面试的时候,真真切切的被问过这样一道题: 如何获取子线程的执行结果? 总所周知,在 单线程 情况下,想获取线程执行结果很简单,只需要写类似的代码即可: Object result = xxx.getXxx(); 但是在 多线程 的情况下,想要获取子线程的执行结果,恐怕就没这么简单了。 剑走偏锋 我们都知道开启一个新线程的方式有两种:继承 Thread 类、实现 Runnable 接口。可是这两种方式都没有返回值,相信这也难不倒聪明的同学,可以把代码写成这样: public class ThreadResultDemo { private volatile static int result = 0; public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(()->{ System.out.println("Hello Sicimike."); // 要返回的结果 result = 1; }); thread.start(); thread.join(); System.out.println("子线程返回的结果:" + result); } } 执行结果: Hello Sicimike. 子线程返回的结果:1 可以看到 主线程

Java4-Java实战-第15单元

会有一股神秘感。 提交于 2020-01-09 15:34:40
==========真题========== 单选题 1 : 在GUI开发中下面哪个是处理器映射器 A: Handler B: HandlerMap C: HandlerMapping D: Mapping 正确答案: C 2 : 关于if语句说法错误的是? A: if语句控制的语句体如果是一条语句,是可以省略大括号的 B: 比较表达式无论简单还是复杂,结果是boolean类型 C: 比较表达式无论简单还是复杂,结果是int类型 D: if语句控制的语句体如果是多条语句,是不可以省略大括号的 正确答案: C 3 : 关于选择结构下列哪个说法正确? A: if语句和 else语句必须成对出现 B: if语句可以没有else语句对应 C: switch结构中每个case语句中必须用break语句 D: switch结构中必须有default语句 正确答案: B 4 : “switch选择结构”定义的种差是什么? A: 利用switch和case进行范围判断 B: 利用switch和case进行等值判断 C: 利用break和continue进行等值判 D: 利用break和continue进行范围判断 正确答案: B 5 : 以下关于switch在程序当中的应用语句说法错误的是? A: default可以省略,但是不建议,因为它的作用是对不正确的情况给出提示 B:

——Java高级应用

喜欢而已 提交于 2020-01-09 00:16:31
一、类加载   类加载是指将类的class文件读入内存,并为之创建一个java.lang.Class对象。系统可以在第一次使用某个类时加载该类,也可以采用预加载机制来加载某个类。   1、Class类     java.lang.Class类封装了一个对象和接口运行时的状态,当加载类时Class类型的对象将自动创建。Class类没有公共构造方法,其对象是JVM在加载类时通过调用   类加载器中的defineClass()方法自动构造,因此不能显示地实例化一个Class对象。     Class类的常用方法(记得填坑)     每个类被加载之后,系统都会为该类生成一个对应的Class对象,通过Class对象就可以访问到JVM中该类的信息。一旦类被载入JVM中,同一个类将不会被再次载入,   被载入JVM的类都有一个唯一表示,该表示是该类的全限定类名。     在Java程序中获取Class对象有如下三种方式: 1 //1、使用Class.forName()方法 2 Class strClass = Class.forName("java.lang.String"); 3 //2、使用类的class属性 4 Class<Float> fclass = Float.class; 5 //3、使用实例对象的getClass()方法 6 Date nowTime = new Date();

JAVA学习第十二天

余生长醉 提交于 2020-01-08 23:18:46
抽象类 针对一个事物,如果这个事物并不是具体事物,而是概括性的(需要抽象修饰这个类),比如动物,应该定义不应该定义具体类 class Animal{},并且动物的eat()/sleep()每个具体动物吃和睡不同的,所以这些功能应该声明(方法不能方法主体) 将当前这个类定义为抽象类! 抽象类的特点: 抽象类不能实例化!(不能创建对象) 注意事项: 1)如果一个类中有抽象方法,那么这个类一定是抽象类 2)抽象类中一定是抽象方法吗? 不一定都是抽象方法,可以是非抽象的,也可以抽象的! 3)抽象类的子类是抽象类还是非抽象类呢? 子类是抽象类的情况: 一般情况没有意义的! 父类已经不能实例化(抽象了) 应该采用的父类引用指向子类对象 例如:Animal a = new Cat() ; 子类已经抽象了,无法实例化 抽象类其他特点: 抽象类成员特点: 成员变量 既可以是变量也可以是常量 成员方法: 既可以是抽象的(子类必须重写),也可以是非抽象的 构造方法: 抽象类中是可以存在构造方法(无参/有参),作用:对该类对象的数据进行构造初始化 abstract跟哪些关键字冲突 private:私有的,外界不能访问的,被private修饰的方法不能被继承 final :状态修饰符 被final修饰的成员方法,不能被重写,而抽象类中的抽象方法必须让子类重写这个功能! static:静态,跟类相关

this关键字、this()、super()

﹥>﹥吖頭↗ 提交于 2020-01-08 22:49:26
对于下面的代码怎么区分是哪个对象调用当前方法: Class Banana { void peel(int i); } publci Class BananaPeel { public static void main(String[] args) { Banana a = new Banana(); Banana b = new Banana(); a.peel(1); b.peel(2); } } 编译器会自动把“所操作对象的引用”作为第一个参数传递给peel(),所以上述两个方法的调用就变成如下形式: Banana.peel(a, 1); Banana.peel(b, 2); this只能在方法内部使用,表示对“调用方法的那个对象”的引用。 如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用即可。 对于下面的代码: public class Apricot { void pick(); void pit() { pick();...} } 在pit()内部,可以写this.pick(),但没不要。编译器会自动添加。 当需要返回对当前对象的引用时,常常在return语句中这样写: public Class Leaf { int i = 0; Leaf increment() { i++; return this; } void print() { System

序列化---Day34

99封情书 提交于 2020-01-08 00:59:20
概述:   Java 提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该 对象的数据 、 对象的 类型 和 对象中存储的属性 等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化。 对象的数据 、 对象的类型和对象中 存储的数据 信息,都可以用来在内存中创建对象 ObjectOutputStream类   java.io.ObjectOutputStream 类,将Java对象的原始数据类型写出到文件,实现对象的持久存储   构造方法:     public ObjectOutputStream(OutputStream out) : 创建一个指定OutputStream的ObjectOutputStream 序列化操作   1. 一个对象要想序列化,必须满足两个条件:     1.1 该类必须实现 java.io.Serializable 接口,Serializable 是一个标记接口,不实现此接口的类将不会使任 何状态序列化或反序列化,会抛出 NotSerializableException 。     1.2 该类的所有属性必须是可序列化的。如果有一个属性不需要可序列化的,则该属性必须注明是瞬态的,使用 transient 关键字修饰   2.写出对象方法    

this关键字

戏子无情 提交于 2020-01-08 00:35:20
this关键字可以 访问本类中的 实例方法 方法名称([参数列表]); 等价于 this.方法名称([参数列表]); this关键字还可以访问本类中的其他构造方法 this(); //访问本类无参构造方法 this([实参列表]); //访问本类有参构造方法 当使用this访问本类构造方法时,则只能编写在构造方法中,并且是第一条语句 构造方法不能出现递归调用 来源: https://www.cnblogs.com/huochemeiyouhuo/p/12164400.html

Java中的继承和多态

a 夏天 提交于 2020-01-07 23:37:06
首先说一下什么是 继承 : 继承的 概念 : 将多个类中的共同代码单独提取出来,形成一个独立的类, 多个类和当前独立的类产生一种关系: 继承关系 extends 继承的 好处 : 1)提高了代码的复用性 2)提高了代码维护性 3)类和类产生这种关系,是多态的前提条件! Java中继承的 特点 : 1)在Java中,只支持单继承,不支持多继承,在别的语言可能有多继承存在多继承的语言:class 子类名 extends 父类名1,父类名2{} 2)在Java中,虽然不支持多继承,但是可以多层继承! (分层初始化:先让父类初始化再是子类初始化) 3)在Java中,所有的Java类(自己定义的,Jdk提供的)都继承自 Object类 (超类) 继承中的 注意事项 : 1)子类继承父类,只能继承父类非私有的成员(成员变量,成员方法),但是可以通过公共方法间接的访问! 2)子类不能继承父类的构造方法,但是可以通过关键字 间接访问父类的构造方法(等会讲super) 3)不要为了部分使用功能去使用"继承" 继承中 成员的组成 成员变量 构造方法 成员方法 成员变量 1)子类继承父类,子类中的成员变量名称和父类中的成员变量不一致的情况:比较简单,分别输出! 2)子类继承父类,子类中的成员变量名称和父类中的成员名称一致的情况:(重点) a)先在子类的局部位置中找,如果存在,就使用 b

反射②:调用构造方法、普通方法以及成员变量

◇◆丶佛笑我妖孽 提交于 2020-01-07 19:12:37
先获取一个类(如Student) Class clazz = Student.class; ①获取构造方法:借助Class类某些可以获取对应类中声明的构造方法实例对象 //Test测试//返回该对象表示类参数列表相匹配的public构造方法(不含继承)对应的Constructor对象 Constructor constructor = clazz.getConstructor();//public //返回该对象表示类参数列表相匹配的构造方法(不区分访问权限)对应的Constructor对象 Constructor constructor = clazz.getDeclaredConstructor();//不区分访问权限//返回该对象表示类包含的所有public构造方法(不含继承)对应的Constructor对象数组 Constructor[] constructors= clazz.getConstructors();//public//返回该对象表示类所声明所有的构造方法(不区分访问权限)对应的Constructor对象 constructors= clazz.getDeclaredConstructors();//不区分访问权限 ②操作构造方法——获取构造方法信息 //获取一个构造方法 Constructor constructor = clazz

javaSE继承和抽象类

耗尽温柔 提交于 2020-01-07 18:55:53
继承 继承的概述和好处 提高代码复用性 使类与类之间产生关系 继承的格式 继承的案例 继承后成员访问特点 继承后的特点—成员变量 继承后成员变量的访问规则 重名 子父类中出现同名的成员表量时,子类会优先访问自己对象中的成员变量,如果此时想访问父类成员变量,需要用到super关键字 super关键字:super可以用于变量和方法 不重名 不重名不影响 继承后的特点—成员方法 继承后成员方法的的访问规则 重名 则创建子类对象调用该方法的时候,子类对象会优先调用自己的方法 不重名 不影响,对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法 方法重写 方法重写与方法重载的区别 方法重写:子方法中出现与父方法的方法名,返回值类型,参数列表都相同的方法,会出现覆盖效果 使用场景:发生再子父类之间的关系。子类继承了父类的方法,但是子类觉得父类方法无法满足自己的需求,子类重新写了个与父类同名的方法,以便覆盖父类的方法。 Overrider重写注解 标记在方法上面,提高代码可读性,也可以防止出错 注意事项 方法重写是在发生父子类之间的关系 子类方法覆盖父类方法,必须要保证权限大于等于父类权限 子类方法覆盖父类方法,返回值类型,函数名和参数列表都要一模一样 方法重载:局部方法中出现方法名和返回值类型相同,参数列表不同的方法