首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C# .NET面试系列二:面向对象

父类的实例构造函数:如果创建了父类的实例,执行父类的实例构造函数。实例构造函数用于初始化实例成员,每次创建实例时都会执行。父类的非静态字段初始化:执行父类的非静态字段初始化。...子类的非静态字段初始化:执行子类的非静态字段初始化。非静态字段按照声明的顺序初始化。方法调用:最后,可以调用类中的方法。方法是在实例被创建后才能被调用。...需要注意的是,静态成员初始化和静态构造函数只会在类第一次被使用时执行,而实例构造函数和非静态成员初始化在每次创建实例时都会执行。这确保了类在使用前得到正确的初始化。7. 接口是否可继承接口?...它使用 static 关键字声明,没有访问修饰符,并且不能带有参数。静态构造函数在以下情况下使用:初始化静态成员:静态构造函数用于初始化类的静态成员。...这些成员属于类而不是类的实例,可以通过类名直接访问,而无需创建类的实例。静态成员在类加载时初始化,只会有一个副本,供所有实例和其他类访问。

25510

Java 面试整理

5、类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当在new的时候,他们的执行顺序?...父类静态成员和静态代码块->子类静态成员和静态代码块->父类非静态成员和非静态代码块->父类构造方法->子类非静态成员和非静态代码块->子类构造方法 TestCode //父类 public class...1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。 2、抽象类要被子类继承,接口要被类实现。...继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识...详细讲解 15、final的用途 final 修饰的类叫最终类,该类不能被继承。 final 修饰的方法不能被重写。 final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。

40210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    关于JAVA你必须知道的那些事(三):继承和访问修饰符

    继承 继承:它是一种类与类之间的关系,通过使用已存在的类作为基础来建立新类。其中已存在的类称为父类(或基类); 建立的新类称为子类(或派生类)。简单的就是子类继承父类的非私有属性和方法。...继承的初始化顺序 继承后的初始化顺序如下: 父类静态成员 -> 子类静态成员 -> 父类对象的构造 -> 子类对象的构造 一个问题: 访问修饰符影响成员加载顺序?静态成员优先于静态代码块执行?...也就是说,我们在子类的构造方法中没有显式标注的情况下,默认调用父类的无参构造方法,因此父类的无参构造方法很重要,一定要写,否则会影响子类的对象实例化。...也就是说父类在实例化的时候会默认调用无参的构造方法(此时你不定义无参的构造方法是可以的),但是如果子类在实例化对象的时候没有显示标志(也就是会默认调用父类无参的构造方法),而此时父类其实是不存在无参的构造方法...Final关键字 当我们不希望某些类被继承,某些方法被重写或者某些数据被修改时,可以使用final关键字来实现这个目的。

    1.1K30

    5:面向对象总结

    在访问允许的情况下,static修饰的成员可以通过类名.的方式访问,在不创建对象实例的情况下也可以 Static修饰的成员叫类成员,为类的所有实例所共享 在static方法内部只能访问类的static属性...但是,非static方法可以访问static成员 因为不需要实例就可以访问static方法,因此static方法内部不能有this和super 静态初始化:static修饰的代码块,当类被加载时执行,且被执行一次...所以把构造器私有化 因为在类的外部不能创建类的实例,那只能在类的内部创建 为了让类的外部可以直接使用该实例,使用static修饰(因为static修饰的成员可以不用new的方式,直接通过类名.的方式访问...,可以在非静态代码块中,或在构造器中来初始化 Eg: Class a{ Final int age;{age=12;}//静态代码块中初始化 Final string name=“”;//string类型加上引号...、构造方法、静态方法 用法: 1)抽象类不可实例化 2)具体的类通过继承抽象类的方式,创建子类的实例 3)当子类继承抽象类以后,要重写抽象类的抽象方法 4)子类必须重写抽象类及其父类的所有的抽象方法,方可实例化

    741120

    Actors

    时,在完成该函数的初始化之前,它不会处理邮箱中其他任何消息。本质上来说,在函数执行完成之前,此时整个 actor 是阻塞状态。 如果上一节例子中使用非重入actor, 例子中函数会执行得到预期结果。...但是因为这些调用可以在self上静态确定,它们会被直接执行,不会阻塞。 在非重入actor上一旦发生死锁,能够使用检测循环调用图的运行时工具检测。...Actor 类型可以用静态方法和实例方法,属性以及下标。也有跟 struct 和 class 一样的存储属性和初始化方法。...,因为这个条件允许一个公有的let属性在不破坏任何程序的情况下,重构成var属性。...为了允许struct可以从指定参数初始化,你需要自定义public初始化函数。 当父、子类在同一个模块中,默认允许直接继承。如果要继承其他模块的类,该类必须显式标记为open。

    1.3K51

    java核心技术基础知识整理

    实现方式:方法重载(编译器绑定,前绑定)和方法重写(运行期绑定,后绑定) 18、静态类和非静态类 (1)静态类 静态类中的字段与方法都必须是static的,静态类不需要实例化就可以使用; (2)非静态类...非静态类中可以有static的字段与方法,也可以由非static的字段与方法,访问static的字段与方法不需要实例化,但是访问非static的字段与方法时需要实例化。...这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。...2.不能在静态方法中使用this关键字; 3.静态的只能访问静态的(因为静态的代码块在构造方法之前就已经开始初始化,而此时非静态的还未开始初始化,如果静态能访问非静态的就会出现发生错误),非静态的可以访问一切...,表明任何类或对象都可以访问这个方法; 3)static表明main()方法是一个静态方法,即方法中的代码是存储在静态存储区的,只要类加载后,就可以使用该方法而不需要通过实例化对象来访问,可以直接通过类名

    86020

    Java中所有的关键字及用法

    被public修饰的类,属性和方法不仅可以跨类使用,还可以跨包使用。 private Java语言修饰符,翻译为私有的。是java语言中,访问权限最窄的修饰符。...被private修饰的属性和方法,只能由本类使用,其子类不可以访问,更不可以跨包访问。 default Java语言权限修饰符,在java语句中,通常称为 默认修饰符,只允许同包的中的类进行访问。...static static被解释为静态方法,静态方法不需要依赖任何对象就可以访问,所有,对于静态方法来说,是没有this的,但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法...它是在object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者被执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。...在java中使用inplements关键字实现接口,并重写接口中的方法。 inplements inplements也可以用作类的继承,不常用!

    28620

    Java基础:Java抽象接口

    这样将功能的定义与实现分离,优化了程序设计 接口的声明:使用interface代替了原来的class其他步骤与定义类相同 接口的实现类:使用implements关键字实现接口,当类实现接口的时候,类要实现接口中所有的方法...接口的继承使用extends关键字,子接口继承父接口的方法。在Java中,类的多继承是不合法,但接口允许多继承。...三、抽象类和接口的差异 1、相同点 抽象类和接口都位于继承的顶端,用于被其他类实现或继承. 都不能直接实例化对象....,优先选用接口,尽量少用抽象类,需要定义子类的行为,又要为子类提供共性功能时才选用抽象类 四、接口的新特性——默认方法和静态方法(jdk8之后) 1、默认方法 可以在不影响已有类的情况下,修改接口;...为保证serialVersionUID值跨不同Java编译器实现的一致性,序列化类必须声明一个明确的 serialVersionUID值。

    42050

    Java面试之关键字

    (只要重新与引用链上的任何一个对象建立关联即可。)但是不建议使用,运行代价高昂,不确定性大,且无法保证各个对象的调用顺序。可用try-finally或其他替代。...它是在object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者被执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。 ...分别用来修饰什么 类的修饰符: public:可以在其他任何类中使用,默认为统一包下的任意类 abstract:抽象类,不能被实例化,可以包含抽象方法,抽象方法不能被实现,无具体功能,只能衍生子类 final...Java中是否可以覆盖(override)一个private或者是static的方法 “static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。...,如果只是类被加载而没有创建实例对象的话则无法访问非静态成员变量 switch switch 语句中的表达式可以是什么类型数据 byte、char、short、int、枚举类型、Java7后可以使用String

    646100

    内部类、异常以及 LeetCode 每日一题

    内部类除了必须定义在其他类里面之外,还有如下区别: 内部类可以比外部类多使用三个修饰符:private 、protected 、static (被当作成员) 非静态内部类不能拥有静态成员。...1.1 非静态内部类 当调用非静态内部类的实例方法时,必须有一个非静态内部类实例,而非静态内部类实例必须寄生在外部类实例里。...如果外部类需要访问非静态内部类的成员,则必须显示创建非静态内部类对象来调用访问其实例成员。 外部类的静态方法、静态代码块不能访问非静态内部类,包括不能使用非静态内部类定义变量、创建实例等。...(可以有普通初始化块) 1.1.1 创建非静态内部类实例 在外部类中,可以直接按照普通的创建对象的形式创建内部类实例 在其它类中,需要先创建外部类实例,再通过外部类实例创建内部类实例,内部类实例寄生于外部类实例...PS Java 还允许在接口里定义内部类,接口里的内部类默认是 public static 修饰 1.2.1 创建静态内部类实例 在外部类中,可以直接按照普通的创建对象的形式创建内部类实例 其他类中:

    74120

    .NET面试题解析(05)-常量、字段、属性、特性与委托

    正因为这个问题,曾经在项目开发中遇到一个因此而产生的Bug: 这个Bug是关于序列化的,有一个类,定义很多个(自动)属性,这个类的信息需要持久化到本地文件,当时使用了.NET自带的二进制序列化组件。...基元类型或值为null的其他引用类型,常量的风险就是不支持跨程序集版本更新,常量值更新后,所有使用该常量的代码都必须重新编译。 3. 字段与属性有什么异同?...静态成员和非静态成员的区别? 静态变量使用 static 修饰符进行声明,静态成员在加类的时候就被加载(上一篇中提到过,静态字段是随类型对象存放在Load Heap上的),通过类进行访问。...不带有static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对象进行访问 。 一个类的所有实例的同一静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值 。...静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等。 5. 自动属性有什么风险? 因为自动属性的私有字段是由编译器命名的,后期不宜随意修改,比如在序列化中会导致字段值丢失。 6.

    1K20

    Java研发面试题『八部曲』——从第一步开始

    (2)要注意的是,对于有继承关系的子类来说,比如 class A extends B,A直接继承拥有了默认的(在同一包下)、protected、public的这个字段,可以直接使用该字段,而不用通过再次的实例化父类或..."父类对象.字段"的形式访问,因为在实例化A类的时候父类B已经实例化好了。...,对于非继承类关系,需要使用 “实例变量.变量名的形式访问”(static类变量除外); 对于有继承关系的子类来说, 子类直接继承了拥有了默认的(在同一包下)、protected、public的这个字段...中的return语句直接返回; (3)在遵守第(2)条return的情况下,执行顺序是:try-->catch(如果有异常的话)-->finally; 6、静态代码块、子类、父类初始化顺序 如下代码的输出结果...在jdk1.2之后,就出现许许多多非线程安全的类。 下面是这些线程安全的同步的类: vector:比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。

    58500

    Effective-java-读书笔记之类和接口

    不要在构造器或者静态工厂之外再提供公有的初始化方法, 也不应该提供重新初始化方法.第18条 组合优先于继承这里说的继承是类的继承, 不是接口的实现.继承打破了封装性.超类的实现有可能会随着发行版本的不同而有所变化...例如: Map中的Entry.非静态成员类非静态成员类的每个实例都隐含着与外围类的一个实例相关联....保存这份引用消耗时间和空间, 并且会导致外围实例在符合垃圾回收时却仍然得以保留.如果嵌套类的实例可以在它外围类的实例之外独立存在, 这个嵌套类就必须是静态成员类; 在没有外围实例的情况下, 要想创建非静态成员类的实例是不可能的..., 它允许外部类的实例被看作是另一个不相关的类的实例.例如: Map的集合视图, Set和List的迭代器.匿名类匿名类没有名字, 它不是外围类的一个成员, 它是在使用的时候同时被声明和实例化....在任何可以声明局部变量的地方, 都可以声明局部类, 并且局部类也遵守同样的作用域规则.局部类有名字, 可以被重复地使用. 只有当局部类在非静态环境中定义的时候, 才有外围实例.

    71671

    .NET面试题解析(05)-常量、字段、属性、特性与委托

    正因为这个问题,曾经在项目开发中遇到一个因此而产生的Bug: 这个Bug是关于序列化的,有一个类,定义很多个(自动)属性,这个类的信息需要持久化到本地文件,当时使用了.NET自带的二进制序列化组件。...基元类型或值为null的其他引用类型,常量的风险就是不支持跨程序集版本更新,常量值更新后,所有使用该常量的代码都必须重新编译。 3. 字段与属性有什么异同?...静态成员和非静态成员的区别? 静态变量使用 static 修饰符进行声明,静态成员在加类的时候就被加载(上一篇中提到过,静态字段是随类型对象存放在Load Heap上的),通过类进行访问。...不带有static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对象进行访问 。 一个类的所有实例的同一静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值 。...静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等。 5. 自动属性有什么风险? 因为自动属性的私有字段是由编译器命名的,后期不宜随意修改,比如在序列化中会导致字段值丢失。 6.

    83610

    HeadFirstJava

    1)如果新的类无法对其他的类通过 IS – A 测试时,就设计不继承其他类的类; 2)只有在需要某类的特殊化版本时,以覆盖或增加新的方法来继承现有的类 3)当你需要定义一群子类的模板,又不想让程序员初始化此模板时...,设计出抽象的类给它们用 4)如果想要定义出类可以扮演的角色,使用接口 要点: 1)如果不想让某个类被初始化,就以abstract这个关键词将它标记为抽象的; 2)抽象的类可以带抽象和非抽象的方法; 3...Object的参数或返回类型; 8)不管实际上所引用的对象是什么类型,只有在引用变量的类型就是带有某方法的类型时才能调用该方法; 9)Object引用变量在没有类型转换的情况下不能赋值给其他的类型,若堆上的对象类型与所要转换的类型不兼容...、私有或不指定的 9)静态方法是不能调用非静态的变量,也不能调用非静态的方法 10)静态变量是在类被加载时初始化的 11)一个被标记为final的变量代表它一旦被初始化之后就不会改动,也就是说类加载之后静态...如果父类实现序列化,则子类也就自动实现 3)当对象被序列化时,整个对象版图都会被序列化,这代表它的实例变量所引用的对象也会被序列化 4)除非该实例变量被标记为transient,否则,该变量在还原的时候会被赋予

    20920

    Java面经——SE基础

    在开发中合理使用继承可以方便地复用代码,重构时继承提供了很大的方便。...接口的实例变量默认是final类型,不可修改,而抽象类不一定。 一个类可以实现多个接口,但只能继承一个抽象类,接口不可以实现接口,但可以继承接口,并且可以继承多个接口。...如果一个类不涉及HashSet、Hashtable、HashMap等内部使用哈希表的数据结构的类时,可以不必重写hashCode方法,因为如果不涉及哈希表hashCode就毫无意义。...该过程发生在类加载生命周期的初始化阶段读者可以阅读我之前写的这篇文章浅谈一个Java类的生命周期。 静态代码块是给类初始化,构造代码块是给对象初始化。...finalize:基础类Object的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。finalize机制现在已经不推荐使用,并且在JDK9开始被标记为deprecated。

    58141

    一文读懂面向对象(OOP)

    静态属性声明必须在方法、构造方法和语句块之外。 静态变量可以在声明时指定,构造方法中指定,静态语句块中初始化。 静态变量在程序开始时创建,在程序结束时销毁。...静态变量和静态方法的访问可以使用: 类名.属性 类名.方法() 静态方法中只能访问静态变量和静态方法。 非静态方法中可以访问静态和非静态变量、静态和非静态方法。...(a2.toString()); } } 注:子类继承父类,会继承父类的属性和方法,那么就需要先调用父类的构造器对父类中的属性进行初始化,初始化后再给子类使用。...修饰成员变量 如果final修饰的是成员变量,可以在非静态初始化块、声明该变量或者构造器中执行初始值。 修饰局部变量 系统不会为局部变量进行初始化,局部变量必须由程序显示初始化。...static { a= 10; } /** * final修饰的是成员变量,可以在非静态初始化块、声明该变量或者构造器中执行初始值 */

    78220

    c#面试题抽象类和接口的区别-金三银四面试:C#程序员经常遇到的30道基础面试题,想你所想

    除了声明和调用语法不同外,虚拟属性的行为与抽象方法一样。   (1)在静态属性上使用修饰符是错误的。   (2)通过包括使用修饰符的属性声明,可在派生类中重写虚拟继承属性。   ...它们也有静态和非静态方法。当它们被装箱时,会从System.继承虚方法,并可实现零个或更多接口。值类型是密封的,这意味着不能从它们派生出其他类型。....;   11、C#中有没有静态构造函数,如果有是做什么用的?   有。静态构造函数用于初始化类。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。...静态构造函数既没有访问修饰符,也没有参数。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。无法直接调用静态构造函数。在程序中,用户无法控制何时执行静态构造函数。   ...在下列情况中可以开启不安全代码使用指针   (1)处理磁盘上的现有结构   (2)涉及内部包含指针的结构的高级COM或平台调用方案   (3)性能关键代码   不鼓励在其他情况下使用不安全上下文。

    2K20

    Java开发岗面试题--基础篇(一)

    抽象类和接口都不能实例化对象,都可以包含抽象方法,而且抽象方法必须被继承的类全部实现。...它们的区别如下: 抽象类和接口都不能直接实例化,如果要实例化,抽象类必须指向实现所有抽象方法的子类对象,接口必须指向实现所有接口方法的类对象。 抽象类要被子类继承,接口要被类实现。..._ 静态变量 非静态变量 调用方式 静态变量通过 “ 类名.变量名 ” 调用 非静态变量通过实例化对象名调用 共享方式 静态变量是全局变量,被类的所有实例化对象共享 非静态变量是局部变量,不共享 相互访问方式...静态变量无法访问非静态变量 非静态变量可以访问静态变量 值传递和引用传递的区别是什么?...修饰的对象 说明 final修饰类 表明该类不能被其他类所继承,但要注意:final类中所有的成员方法都会隐式的定义为final方法。

    2K40

    代码质量规则

    应使用 sealed 修饰符标记不希望被继承的类型,以免将其用作基类型。 CA1053:静态容器类型不应具有构造函数 公共或嵌套公共类型只声明了静态成员,但具有公共或受保护的默认构造函数。...CA1054:URI 参数不应为字符串 如果某方法采用 URI 的字符串表示形式,则应提供采用 URI 类的实例的相应重载,该重载以安全的方式提供这些服务。...CA1810:以内联方式初始化引用类型的静态字段 当一个类型声明显式静态构造函数时,实时 (JIT) 编译器会向该类型的每个静态方法和实例构造函数中添加一项检查,以确保之前已调用该静态构造函数。...静态构造函数检查会降低性能。 CA1812:避免未实例化的内部类 程序集级别类型的实例不是由程序集中的代码创建的。 CA1813:避免使用非密封特性 .NET 提供用于检索自定义属性的方法。...CA5391:在 ASP.NET Core MVC 控制器中使用防伪造令牌 处理 POST、PUT、PATCH 或 DELETE 请求而不验证防伪造令牌可能易受到跨网站请求伪造攻击。

    2.2K30
    领券