类对象

讨论Java中的内部类是什么?

99封情书 提交于 2020-01-14 14:47:56
目录 前言 what is that? 成员内部类 局部内部类 匿名内部类 why use it? how to use? 前言 内部类,讲完前面的特性,今天就讲下内部类这个用的比较多,出现频率挺高的知识点。 what is that? 首先,顾名思义,内部类就是在类的内部,也就是类的类,嵌套在里面的。直接代码介绍,现一般分为成员内部类和局部内部类,还有一种匿名类。内部类拥有对外围对象的引用。大部分使用的都是成员内部类。 成员内部类 是一种与Field、方法、构造器和初始化块相似的类成员; 局部内部类和匿名内部类 则不是类成员。 成员内部类 定义在类里面的成员变量域的类,就是成员内部类。此时的内部类作为其外部类的成员,所以可以使用任意访问控制符如private、protected和public等修饰。 class A { //成员内部类,这种包含类的结构 class b{} } 成员内部类还可以分为静态内部类和非静态内部类。注意: 根据静态成员不能访问非静态成员的规则,外部类的静态方法、静态代码块不能访问非静态内部类,包括不能使用非静态内部类定义变量、创建实例等。 静态内部类(带static) static关键字的作用是把类的成员变成 类相关 ,而 不是 实例相关,即static修饰的成员属于 整个 类,而不属于单个对象。静态内部类只可以访问静态的外部类的方法和对象。但是静态内部类

通过应用程序域AppDomain加载和卸载程序集

▼魔方 西西 提交于 2020-01-14 13:24:04
微软装配车的大门似乎只为货物装载敞开大门,却将卸载工人拒之门外。车门的钥匙只有一把,若要获得还需要你费一些心思。我在学习Remoting的时候,就遇到一个扰人的问题,就是Remoting为远程对象仅提供Register的方法,如果你要注销时,只有另辟蹊径。细心的开发员,会发现Visual Studio.Net中的反射机制,同样面临这个问题。你可以找遍MSDN的所有文档,在Assembly类中,你永远只能看到Load方法,却无法寻觅到Unload的踪迹。难道我们装载了程序集后,就不能再将它卸载下来吗? 想一想这样一个场景。你通过反射动态加载了一个dll文件,如今你需要在未关闭程序的情况下,删除或覆盖该文件,那么结果会怎样?很遗憾,系统会提示你无法访问该文件。事实上该文件正处于被调用的状态,此时要对该文件进行修改,就会出现争用的情况。 显然,为程序集提供卸载功能是很有必要的,但为什么微软在其产品中不提供该功能呢?CLR 产品单元经理(Unit Manager) Jason Zander 在文章 Why isn't there an Assembly.Unload method? 中解释了没有实现该功能的原因。Flier_Lu在其博客里( Assembly.Unload )有详细的中文介绍。文中介绍了解决卸载程序集的折中方法。Eric Gunnerson在文章《 AppDomain

C++深拷贝与浅拷贝

早过忘川 提交于 2020-01-14 03:41:31
转自: http://www.cnblogs.com/BlueTzar/articles/1223313.html 对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=88; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include <iostream> using namespace std; class CExample { private:  int a; public:  CExample(int b)  { a=b; }  void Show ()  { cout<<a<<endl; } }; int main() {  CExample A(100);  CExample B=A;  B.Show ();  return 0; } 运行程序,屏幕输出100。从以上代码的运行结果可以看出,系统为对象B分配了内存并完成了与对象A的复制过程。就类对象而言,相同类型的类对象是通过拷贝构造函数来完成整个复制过程的。下面举例说明拷贝构造函数的工作过程。 #include <iostream> using namespace std; class CExample { private: int a; public: CExample(int b) { a=b;} CExample

六、关键字

别等时光非礼了梦想. 提交于 2020-01-13 05:43:26
4.关键字: (1)this:this是一个关键字,存储了当前对象的内存地址 -->this对象,用来访问本类自己的属性和方法。 -->构造器中,给属性set值。 【1】 使用本类的属性 ,this.属性名, this可以省略不写 【2】 调用本类的方法 this.方法名() ,this可以省略不写 【3】 调用本类的构造方法, 要求必须是构造方法中的第一句代码 this()—》调用本类的无参构造方法 this(实参列表)调用本类的带参构造方法 【4】 当局部变量与成员变量名称相同时,this代表成员变量 (2)continue:跳出本次循环继续下一次循环; break:跳出循环体,继续执行循环外的函数体;在switch...case中终止与下一个case的比较; (3) return: 跳出整个函数体,函数体后面的部分不再执行。 (4)final关键字: 修饰类:final修饰的类不能被继承,其中的属性可以自由定义类型,但是其中的方法默认被final,不能修改。(除非真的不想其被继承,出于安全问题,一般不设置为final); 修饰方法:如果只有在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的。 修饰属性:基本数据类型:值不能被修改,固定值。引用数据类型:在栈内存中的存储的地址不变, 对于一个final变量,如果是基本数据类型的变量

Java反射机制

一笑奈何 提交于 2020-01-11 23:28:18
一、什么是反射? 在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有),这种动态获取的信息,及调用对象的方法的功能就称为Java的反射机制。 二、获取类对象 1、什么是类对象?   创建Dog类和Cat类 public class Dog { private String name; private int age; public Dog() { } public Dog(String name, int age) { this.name = name; this.age = age; } /*getter and setter*/ } public class Cat { private String name; private String hobby; /*getter and setter*/ }   实例化两个Dog类的对象 Dog dog1 = new Dog("大黄", 5); Dog dog2 = new Dog("小黑", 3); 在理解类对象之前,先说我们熟悉的对象之间的区别: dog1和dog2都是 Dog对象 ,他们的区别在于,各自有 不同的名称、年龄 。 然后说说类之间的区别   Dog和Cat都是类,他们的区别在于有 不同的方法,不同的属性 。 类对象

C/C++中的const、static、inline、friend、template、virtual、异常机制等特性

徘徊边缘 提交于 2020-01-11 07:16:46
一、const const关键字的作用 (1)作用: 1)欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变他了; 2)对指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const; 3)在一个函数声明中,const可以修饰形参表明他是一个输入参数,在函数内部不可以改变其值; 4)对于类的成员函数,有时候必须指定其为const类型,表明其是一个常函数,不能修改类的成员变量; 5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。 const修饰变量 变量的值不能改变 const修饰指针 如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量 如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量 指针常量:不能通过指针来修改变量的值。 常量指针:一直指向该变量,不能给该指针赋予其他地址 函数中使用const const修饰函数参数 表示参数不可变 若参数为引用,可以增加效率 const引用传递和函数按值传递的效果是一样的,但按值传递会先建立一个类对象的副本, 然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效 const按值传递时只是外部对象的拷贝,值的改变不会对外部有什么影响

Java学习入门13

本秂侑毒 提交于 2020-01-10 10:04:33
1:形式参数和返回值的问题(理解) (1)形式参数: 类名:需要该类的对象 抽象类名:需要该类的子类对象 接口名:需要该接口的实现类对象 (2)返回值类型: 类名:返回的是该类的对象 抽象类名:返回的是该类的子类对象 接口名:返回的是该接口的实现类的对象 (3)链式编程 对象.方法1().方法2().......方法n(); 这种用法:其实在方法1()调用完毕后,应该一个对象; 方法2()调用完毕后,应该返回一个对象。 方法n()调用完毕后,可能是对象,也可以不是对象。 2:包(理解) (1)其实就是文件夹 (2)作用: A:区分同名的类 B:对类进行分类管理 a:按照功能分 b:按照模块分 (3)包的定义(掌握) package 包名; 多级包用.分开。 (4)注意事项:(掌握) A:package语句必须在文件中的第一条有效语句 B:在一个java文件中,只能有一个package C:如果没有package,默认就是无包名 (5)带包的编译和运行 A:手动式 B:自动式(掌握) javac -d . HelloWorld.java 3:导包(掌握) (1)我们多次使用一个带包的类,非常的麻烦,这个时候,Java就提供了一个关键字import。 (2)格式: import 包名...类名; 另一种: import 包名...*;(不建议) (3)package,import

String和StringBuffer有什么区别

◇◆丶佛笑我妖孽 提交于 2020-01-08 03:11:16
首先,String和StringBuffer主要有2个区别: (1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringBuffer类对象为可修改对象,可以通过append()方法来修改值 (2)String类对象的性能远不如StringBuffer类。 关于以上具体解释如下: 在java中有3个类来负责字符的操作。 1.Character 是进行单个字符操作的, 2.String 对一串字符进行操作。不可变类。 3.StringBuffer 也是对一串字符进行操作,但是可变类。 String: 是对象不是原始类型. 为不可变对象,一旦被创建,就不能修改它的值. 对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去. String 是final类,即不能被继承. StringBuffer: 是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象 它只能通过构造函数来建立, StringBuffer sb = new StringBuffer(); 注意:不能通过赋值符号对他进行赋值. sb = "welcome to here!";//error 对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer

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

Iterator迭代器

自作多情 提交于 2020-01-07 21:49:28
集合的继承关系: Iterator迭代器是一个接口,无法直接使用,需要使用Iterator接口的实现类对象,获取该类的方法比较特殊 package Exercise; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /** * 2020/1/7 * java.util.Iterator接口:迭代器(对集合元素进行遍历) * E next 取出集合中的下一个元素 * boolean hasNext()判断集合中还有没有下一个元素 * Iterator迭代器是一个接口,无法直接使用,需要使用Iterator接口的实现类对象,获取该类的方法比较特殊 * Collection接口中有一个方法叫iterator(),返回的就是迭代器的实现类对象Iterator<E> iterator * * 迭代器的使用步骤: * 1.使用集合中的方法iterator()获取迭代器的实现类对象,使用iterator接口接收(多态) * 2.hasNext()方法判断 * 3.next()方法取出集合中的下一个元素 */ public class IteratorExample { public static void main(String[] args) { Collection