类对象

Java 反射 调用运行时类对象等等

社会主义新天地 提交于 2020-02-04 10:16:23
@Test public void test2 ( ) throws Exception , InstantiationException { //获取当前Class /** * //获取 Class 的几种方式 * Class<Person> clazz1 = Person.class; * System.out.println(clazz1); * * Person p1 = new Person(); * Class clazz2 = p1.getClass(); * Class clazz3 = Class.forName("com.study.refilex.Person"); */ Class clazz = Person . class ; //创建当前运行时类对象 Person person = ( Person ) clazz . newInstance ( ) ; //获取当前运行时类的属性 Field name = clazz . getDeclaredField ( "name" ) ; //保证当前属性是可以访问的 name . setAccessible ( true ) ; //设置当前运行时类对象的属性的值 name . set ( person , "xingming" ) ; //获取此对象的值 System . out . println (

Ilist<>与List<>的区别

时光怂恿深爱的人放手 提交于 2020-02-04 07:59:30
首先要了解一点的是关于接口的基础知识: 接口不能直接实例化 但是接口派生出来的抽象类可以实例化 所有派生出来的抽象类都可以强制转换成接口的实例 第三条我解释一下:比如,IList <Class> IList11 =new List <Class>(); 也就是接口派生出来的抽象类可以转换为接口的实例,这也是常说的里氏替换原则(子类对象可以代替父类对象,但其父类对象不能代替子类对象) 首先,List<T>是一个类,IList<T>是一个接口。接口和类的区别是本质的,类是负责功能的实现,而接口则是负责功能的定义。所以它们的区别本质上也就是类和接口的区别。 具体来说,IList 泛型接口是 ICollection 泛型接口的子代,并且是所有泛型列表的基接口。它仅仅是所有泛型类型的接口,并没有太多方法可以方便实用,如果仅仅是作为集合数据的承载体,那么使用IList<T>完全可以胜任。但是更多的时候,我们要对集合数据进行处理,从中筛选数据或者排序。这个时候IList<T>就爱莫能助了。 1、当你只想使用接口的方法时,ILis<>这种方式比较好.他不获取实现这个接口的类的其他方法和字段,有效的节省空间. 2、IList <>是个接口,定义了一些操作方法这些方法要你自己去实现 List <>是泛型类,它已经实现了IList <>定义的那些方法 IList <Class1> IList11

Django-模型

半腔热情 提交于 2020-02-04 06:35:33
Django-模型 1.模型与数据库的关系 模型负责业务对象和数据库的关系映射,ORM–》对象-关系-映射 2.配置数据库 1)首先创建数据库; 2)一些数据库的基本配置,包括哪个数据库软件,哪个数据库等等; 3)在models.py文件中创建类,在类中创建字段;类相当于表,字段相当于表中的列,多以要写好约束 4)在settings.py中的36行写上应用名 5)生成迁移 python manage.py makemigrations 6)执行迁移 python manage.py migrate 3.使用模型对数据库进行操作 视图中导入models 调用对应的模型进行数据的操作 4.关于字段的类型 1)主键Django中会自动那个添加 2)BooleanField 3)CharField 4)TextFeild 5)IntegerField 6)DecimalField(总位数,小数位) 7) DateField(auto_now=False,auto_new_add=False) 8)DatetimeField(参数同上) 9)ImageField() 5.约束字段 null db_column db_index default unique 6.模型类的属性和方法 1)objects 管理器 2)DoesNotExist 3)str(self) 4)save()

String类

自闭症网瘾萝莉.ら 提交于 2020-02-04 02:36:42
String 类 “ == ”与“ equals() ”的区别 “==” 是 java 提供的关系运算符,主要功能是进行数值相等判断的,如果用在了 String 对象上,表示的是内存地址数值的比较; “ equals ”是由 String 提供的一个方法,负责进行字符串内容的比较 在开发时,如果要判断输入的内容是否是某一字符串,应将字符串写在最前面 String 的两种实例化方式区别: 方式一:直接赋值 String str = “hello”; 方式二:构造方法 String str = new String(“hello”); 问:采用方式一 String stra = “hello”; String strb = “hello”; String strc = “world”; System.out.println(stra==strb) //true System.out.println(stra==strc) //false 共享设计模式: 在 JVM 的底层实际上会存在一个对象池(不一定只保存 String 对象),当代码之中使用了直接赋值的方式定义了一个 String 类对象时,会将此字符串对象所使用的匿名对象入池保存。而后如果后续还有其他 String 类对象也采用了直接赋值的方式,并且设置了同样内容的时候,那么将不会开辟新的堆内存空间

多态以及实现

断了今生、忘了曾经 提交于 2020-02-03 22:53:06
1.多态概述 多态 :在继承层次结构中,父类中定义的行为被子类重写后表现出不同的效果,它使得同一个行为在父类及其子类中具有不同的语义,可以简单理解为:事物存在的多种形态。 比如说:动物(父类)有move()方法,至于怎么移动,就要看动物的子类了,猫可以跑,鸟可以飞,鱼可以游,他们都继承自动物这个类,并且重写了父类的move()方法。 前提 有继承关系 有方法重写 有父类引用指向子类对象 Father f = new Son(); 注:如果把子类对象赋给父类引用(将子类对象当作父类对象看待),那么就只能调用父类中已有的方法。 好处 提高了代码的维护性(继承保证)和扩展性(由多态保证) 消除了类之间的耦合性(类之间的耦合是由于继承引起的) 可以当作形式参数,接受任意子类对象。 弊端 不能使用子类特有的属性和行为。 静态绑定和动态绑定 调用对象方法的执行过程: 编译器获取所有可能被调用的候选方法 编译器根据实参类型从候选方法中匹配出应该调用的方法 静态绑定:编译器可以准确的知道,应该调用哪个方法。 动态绑定。 多态中成员访问特点 成员变量:编译时看左边(父类),运行时也看左边(父类)。 成员方法:编译时看父类,运行时看子类(实际进栈方法是子类方法)。 静态方法:编译时看父类,运行时看父类(静态和类相关,算不上重写)。 补充: 当作参数时用多态最好,因为可扩展性强

第五章简易笔记

一笑奈何 提交于 2020-02-01 17:12:25
第五章-继承 1. 继承已存在的类就是复用(继承)这些类的方法和域。在此基础上,还可以添加一些新的方法和域,以满足新的需求。 2.反射是指在程序运行期间发现更多的类及其属性的能力。 3.在java中所有继承都是公有继承。 4. 在子类中可以增加域、增加方法或覆盖超类的方法,然而绝对不能删除继承的任何域和方法。 5.this与super关键字用途总结: this用途: (1)引用隐式参数; (2)调用该类其他的构造器。 super用途: (1)调用超类方法; (2)调用超类构造器。 6.调用构造器的语句只能作为另一个构造器的第一条语句出现。构造器参数既可以传递给本类(this)的其他构造器,也可以传递给超类(super)的构造器。 7.一个对象变量可以指示多种实例类型的现象被称为多态,在运行时能够自动的选择调用哪个方法的现象称为动态绑定。 8.java不支持多继承。 9.在java中,对象变量是多态的。一个Employee变量既可以引用一个Employee类对象,也可以引用一个Employee类的任何一个子类对象。 10.不能将超类的引用赋给子类对象。例如:Manager m = staff[i];//error 原因:不是所有的雇员都是经理。 11. 动态绑定(弄清对象的执行过程): 1) 编译器查看对象的声明类型和方法名

关于java中的继承

Deadly 提交于 2020-02-01 17:08:55
我们都知道Java中的继承是复用代码、扩展子类的一种方式,继承使得Java中重复的代码能够被提取出来供子类共用,对于Java程序的性能以及修改和扩展有很大的意义,所以这是一个非常重要的知识点。 那么对于继承的知识点,你真的都了解了吗? 首先,我们都知道子类继承父类,就能直接访问父类的公共属性以及受保护属性(public和protected),同时也能直接访问父类的公共方法以及受保护方法;其次,对于父类的私有属性,子类并不能直接访问,但是可以通过父类提供的getter和setter方法进行访问,而父类的私有方法,子类无法直接访问;还有,对于父类的包访问权限属性和方法(default),如果子类和父类在同一个包下,子类可以继承并且直接访问到,如果二者不在同一个包下,则子类无法直接访问到这些方法和属性,但是同样的可以通过父类的getter和setter方法去访问这些属性;最后一点,我们很多人其实都有疑问,子类继承父类,不是应该继承了父类的所有东西吗,为什么访问不到那些私有属性?其实这里要从内存分析来看,当我们要创建一个子类的对象时,Java虚拟机会先帮我们生成对应的父类对象,因为我们都知道,在子类的构造方法中中,首行代码必须是父类构造方法的调用,即通过super关键字来调用,如果不写,则虚拟机会自动帮我们加入super()(前提是父类有无参构造方法)

小白学Java:内部类

别来无恙 提交于 2020-01-31 17:17:58
目录 小白学Java:内部类 内部类的分类 成员内部类 局部内部类 静态内部类 匿名内部类 内部类的继承 内部类有啥用 小白学Java:内部类 内部类是封装的一种形式,是定义在类或接口中的类。 内部类的分类 成员内部类 即定义的内部类作为外部类的一个普通成员(非static),就像下面这样: public class Outer { class Inner{ private String id = "夏天"; public String getId() { return id; } } public Inner returnInner(){ return new Inner(); } public void show(){ Inner in = new Inner(); System.out.println(in.id); } } 我们通过以上一个简单的示例,可以得出以下几点: Inner类就是内部类,它的定义在Outer类的内部。 Outer类中的returnInner方法 返回一个Inner类型的对象 。 Outer类中的show方法通过我们熟悉的方式创建了Inner示例并访问了其私有属性。 可以看到,我们像使用正常类一样使用内部类,但实际上,内部类有许多奥妙,值得我们去学习。至于内部类的用处,我们暂且不谈,先学习它的语法也不迟

同名覆盖引发的问题

自古美人都是妖i 提交于 2020-01-31 17:12:04
父子间的赋值兼容 子类对象可以直接赋值给父类对象 子类对象可以直接初始化父类对象 父类指针可以直接指向子类对象 父类引用可以直接引用子类对象 实验 // 同名覆盖引发的问题.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <iostream> class Parent { public: int mv; Parent() { mv = 0; } void add(int x) { mv = mv + x; } void add(int x,int y) { mv = mv + x + y; } }; class Child :public Parent { public: int mi; Child() { mi = 0; } void add(int x, int y, int z) { mi = mi + x + y + z; } }; int main() { Child c; Parent p; //子类对象可以直接赋值给父类对象 p = c; //子类对象可以直接初始化父类对象 Parent p1(c); //父类指针可以直接指向子类对象 Parent* p2 = &c; //父类引用可以直接引用子类对象 Parent& p3 = c; //没有发生同名覆盖 p2->add(1); p2->add(2, 3); p2-

VC-基础:MFC单文档程序架构解析

烈酒焚心 提交于 2020-01-31 02:06:46
MFC单文档程序架构解析 这里我以科院杨老师的单文档程序来分析一下MFC单文档的程序架构,纯属个人见解,不当之处烦请指教! 首先我们了解到的是 图(一) theApp 是唯一一个在程序形成的时候就存在的全局变量,它属于CstockAppApp类,而CstockAppApp 继承于CwinApp类,我们看一下MSDN中CwinApp的继承关系如下: 图(二) 从继承关系当中,我们发现theApp是作为程序的实体而存在的,是单文档程序的核心。 首先分析一下的是CsockAppApp这个类,这里面有一个重要的函数 BOOL CStockAppApp::InitInstance()这个函数,包含了单文档程序中重要的信息,特别要提到的是一下的一段代码: CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CStockAppDoc), RUNTIME_CLASS(CMainFrame), // main SDI frame windon RUNTIME_CLASS(CStockAppView)); 这里体现了几个重要的思想,第一动态创建和动态附加的一种思想,RUNTIME_CLASS是一个宏定义,这里不做展开