类和对象

双亲委派模型和自定义类加载器

梦想与她 提交于 2020-01-07 14:12:33
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 其实,双亲委派模型并不复杂。自定义类加载器也不难!随便从网上搜一下就能搜出一大把结果,然后 copy 一下就能用。但是,如果每次想自定义类加载器就必须搜一遍别人的文章,然后复制,这样显然不行。可是自定义类加载器又不经常用,时间久了容易忘记。相信你经常会记不太清 loadClass 、 findClass 、 defineClass 这些函数我到底应该重写哪一个?它们主要是做什么的?本文大致分析了各个函数的流程,目的就是让你看完之后,难以忘记!或者说,延长你对自定义类加载器的记忆时间!随时随地想自定义就自定义! 1. 双亲委派模型 关于双亲委派模型,网上的资料有很多。我这里只简单的描述一下,就当是复习。 1.1 什么是双亲委派模型? 首先,先要知道什么是类加载器。简单说,类加载器就是根据指定全限定名称将 class 文件加载到 JVM 内存,转为 Class 对象。如果站在 JVM 的角度来看,只存在两种类加载器: 启动类加载器( Bootstrap ClassLoader ):由 C++ 语言实现(针对 HotSpot ),负责将存放在 <JAVA_HOME>\lib 目录或 -Xbootclasspath 参数指定的路径中的类库加载到内存中。 其他类加载器:由 Java 语言实现,继承自抽象类

Scala中对象和类之间的区别

你说的曾经没有我的故事 提交于 2020-01-07 01:03:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我刚刚浏览了Internet上的一些Scala教程,并注意到在某些示例中,在示例开始时声明了一个对象。 Scala中的 class 和 object 什么区别? #1楼 一个对象只有 一个 实例(您不能调用 new MyObject )。 您可以有一个类的 多个 实例。 对象具有 与 Java中的静态方法和字段 相同 (和一些其他) 目的 。 #2楼 tl; dr class C 定义一个类,就像在Java或C ++中一样。 object O 创建一个 单例 对象 O 作为某个匿名类的实例; 它可用于保存与某些类的实例不相关的静态成员。 object O extends T 使对象 O 成为 trait T 的实例; 然后,您可以将 O 传递到任何一个预期为 T 位置。 如果有 class C ,那么 object C 是类 C 的 伴随对象 ; 请注意,伴随对象 不是 C 的实例。 另请参阅Scala文档以获取 对象 和 类 。 用作静态成员的主机 通常,您需要一个 object 来保存无需首先实例化某个类的实例即可使用的方法和值/变量。 此用法与Java中的 static 成员密切相关。 object A { def twice(i: Int): Int = 2*i } 然后,您可以使用 A.twice(2

包装类和toString和static关键字

爱⌒轻易说出口 提交于 2019-12-29 21:29:43
包装类   针对八种基本数据类型定义的引用类型。   有类的特点,可以调用类中的方法。 基本数据类型 包装类 boolean Boolean byte Byte short Short int Integer long Long char Character float Float double Double 基本数据类型包装成包装类的实例------装箱(类型要匹配)   通过包装类的构造方法实现:Integer t = new Integer(i);   通过字符串参数构造包装类对象:Float f = new Float("4.56"); 获得包装类对象中包装的基本类型变量-----拆箱(类型要匹配)   调用包装类的.xxxValue()方法:boolean b = bObj.booleanValue(); JDK1.5之后,支持自动装箱,自动拆箱。但类型必须匹配。如果类型不匹配编译不报错,但是运行会报错。   自动装箱:Integer A = 112;//直接赋值就是自动装箱   自动拆箱:int B = A;//将变量A的值赋值给基本数据类型B就是自动拆箱 字符串转换成基本数据类型   通过包装类的构造方法实现:int i = new Integer("12");   通过包装类的parseXxx(String s)静态方法实现:Float f = Float

Java知多少(77)日期和时间类

旧时模样 提交于 2019-12-29 20:26:22
Java 的日期和时间类位于 java.util 包中。利用日期时间类提供的方法,可以获取当前的日期和时间,创建日期和时间参数,计算和比较时间。 Date 类 Date 类是 Java 中的日期时间类,其构造方法比较多,下面是常用的两个: Date():使用当前的日期和时间初始化一个对象。 Date(long millisec):从1970年01月01日00时(格林威治时间)开始以毫秒计算时间,计算 millisec 毫秒。如果运行 Java 程序的本地时区是北京时区(与格林威治时间相差 8 小时),Date dt1=new Date(1000);,那么对象 dt1 就是1970年01月01日08时00分01秒。 请看一个显示日期时间的例子: 1 import java.util.Date; 2 public class Demo{ 3 public static void main(String args[]){ 4 Date da=new Date(); //创建时间对象 5 System.out.println(da); //显示时间和日期 6 long msec=da.getTime(); 7 System.out.println("从1970年1月1日0时到现在共有:" + msec + "毫秒"); 8 } 9 } 运行结果: Mon Feb 05 22:50:05

学习Scala:伴生对象和伴生类之间的关系(二)

不想你离开。 提交于 2019-12-29 20:12:02
孤立对象是只有一个object关键字修饰的对象,该对象会编译成两个class文件,一个是以孤立对象的名字命名的class, 一个是以孤立对象的名字后面加上一个$ 字符命名的class, 这个class又叫做虚构类, 源码中的孤立对象中的字段和方法,都被编译成以孤立对象的名字命名的class中静态方法, 这些静态方法都会访问单例的虚构类对象。虚构类市传统意义上的单例模式, 并且在类初始化的时候, 就会创建唯一的对象, 源码中的所有字段和方法都会在虚构类中有相对应的成员. 伴生类和伴生对象. 所谓伴生对象,也是一个Scala中的单例对象,使用object关键字修饰, 除此之外,还有一个使用class关键字定义的同名类, 这个类和单例对象存在于同一个文件中,这个类就叫做这个单例对象的伴生类,相对来说, 这个单例对象叫做伴生类的伴生对象. 伴生类和伴生对象的简单例子: class Test { var field = "field" def doSomeThing = println ( "do something" ) } object Test { val a = "a string" def printString = println ( a ) } 此时多了一个伴生类, 伴生类中有一个字段field和一个方法doSomething. 编译这个文件, 同时生成了两个class,

C++语言基础(3)-类和对象

心不动则不痛 提交于 2019-12-29 04:50:22
类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数。 一.类的定义 一个简单的类的定义: class Student{ public: //成员变量 char *name; int age; float score; //成员函数 void say(){ cout<<name<<"的年龄是"<<age<<",成绩是"<<score<<endl; } }; class 是 C++ 中新增的关键字,专门用来定义类。 Student 是类的名称;类名的首字母一般大写,以和其他的标识符区分开。 { } 内部是类所包含的成员变量和成员函数,它们统称为类的成员(Member);由 { } 包围起来的部分有时也称为类体,和函数体的概念类似。 注意:在类定义的最后有一个分号 ; ,它是类定义的一部分,表示类定义结束了,不能省略。 类只是一个模板(Template),编译后 不占用内存空间 ,所以在定义类时不能对成员变量进行初始化,因为 没有地方存储数据 。只有在创建对象以后才会给成员变量分配内存,这个时候就可以赋值了。 二.创建对象并访问类的成员 创建对象的方式如下: #include <iostream> using namespace std; /

深入类和对象

自作多情 提交于 2019-12-28 15:08:51
Python高级编程技巧 序言 鸭子类型与多态 isinstance与type的区别 类变量与对象变量 Python对象的自省机制 super函数 序言 前面的文章已经和大家一起学完了Python的基础知识,从本章文章之后会继续和大家一起学习Python高级编程技巧,感谢大家的支持! 鸭子类型与多态 多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚"鸭子类型" **动态语言调用实例方法时不检查类型,只要方法存在,参数正确,就可以调用。**这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。 所谓多态 : 定义时的类型和运行时的类型不一样 , 此时就成为多态 。 抽象基类(abc模块) 抽象基类(abstract base class,ABC):抽象基类就是类里定义了纯虚成员函数的类。纯虚函数只提供了接口,并没有具体实现。 抽象基类不能被实例化(不能创建对象),通常是作为基类供子类继承,子类中重写虚函数 ,实现具体的接口。 抽象基类就是定义各种方法而不做具体实现的类,任何继承自抽象基类的类必须实现这些方法,否则无法实例化。 应用场景 1.判断某个对象的类型; 2.我们需要强制某个子类必须实现某些方法。 isinstance与type的区别 如果我们需要查看某个变量的类型时

(8)python 类和对象

主宰稳场 提交于 2019-12-27 18:55:58
一、类和对象 python可以动态的添加删除变量和方法 类中的方法至少要有一个参数,第一个参数会被绑定到类的实例上,通常命名为self 1.构造函数 类中的构造方法名为 __init__(self,...,...),如果类没有定义构造方法,则会自动包含一个只有self的构造方法 class Person: '这是一个Person类' def __init__(self,name='tom',age=10): print('创建一个Person类') self.name=name self.age=age def say(self,content): print(content) python一个类只有一个构造函数。不向java net 可以重载多个构造函数 2.创建对象 调用构造方法创建类的对象,不需要使用new关键字 p=Person()#打印创建一个Person类 调用 p.name p.say('你好') 赋值 p.name='lilei' 3.动态操作对象 动态添加变量 p.skills=['Singing','Swimming'] 动态删除变量 del p.name 动态创建方法 动态创建方法是,不会自动绑定到第一个参数,所以调用方法时,需要手动绑定 def hi(self): print("say hello") p.hello=hi p.hello(p)

java 类和对象

倾然丶 夕夏残阳落幕 提交于 2019-12-27 17:53:03
1.对象 对象是事物存在的实体,通常又会将对象划分为两个部分,对象的属性和对象的行为 2.类 类就是一类事物的总称,如果将某个事物抽象为对象,那么类就是这个对象的总称 xx类-----实例化------->xx对象 类是封装对象的属性和行为的载体,对象则是类的实例。 3.面向对象程序的特点:封装,继承,多态 封装 封装是面向对象编程的核心思想,将对象的属性和行为封装起来,对使用者隐藏了数据的实现方式。 使用者只能通过对象的方法与对象数据进行交互,这样做的好处是当对象的数据方式发生改变时,只要仍然 是使用同样的方法来操作数据,则对其他的对象不会产生任何影响。 继承 有时候类与类存在一定的关联关系,常见的有:依赖(uses-a)、聚合(has-a)、继承(is-a)。 继承时is-a的关系,即当子类继承父类,子类就拥有了父类的属性和方法,而同时子类又能够去定义自己 特有的属性和方法,这样就能够复用父类的代码,缩短开发时间,提高系统性能。 多态 多态指的将父类对象应用于子类的特征,当父类中的某方法在子类中可能都有不同的实现,当用父类去实例化 子类并调用该方法时,只有在运行的时候才能知道调用的具体方法。 4.类的结构 public class Book { private String name; //成员变量 private String price;//成员变量 /** * 构造器:

Java类和对象

不羁岁月 提交于 2019-12-27 05:43:23
1、Java中的权限修饰符 注:当声明类时不使用public、protected和private修饰符设置类的权限,则这个类预设为包存取范围,即只有一个包中的类可以调用这个类的成员变量或成员方法。同时Java规定,类的权限设定会约束类成员的权限设定,如果类中的成员变量或成员方法没有指定修饰符,则按类的修饰符来做限制。 2、类 (1)this 如果在类中定义的构造方法都不是无参的构造方法,那么编译器也不会为类设置一个默认的无参构造方法,当试图调用无参构造方法实例化一个对象时,编译器会报错。所以 只有在类中没有定义任何构造方法时,编译器才会在该类中自动创建一个不带参数的构造方法。 Java中this代表本类对象的引用,this关键字被隐式地用于引用对象的成员变量和方法。this和对象都可调用成员变量和成员方法,实际上this引用的就是本类的一个对象。 (a)this可作为方法的返回值。 public Book getBook(){ return tihs; // 返回Book类引用 } (b)this可调用类中的构造方法 public class AnyThing{ public static void main(String[] args) { AnyThing any = new AnyThing(); } public AnyThing() { this("this