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

Java基础入门笔记05——面向对象,创建对象的内存分析,继承,封装,多态,object类,this&&super,方法重写,引用类型的强制转换,instanceof,抽象类,内部类,接口,异常。[通

在代码运行角度:先有类,后有对象。类是对象的模板,对象是类的实例。...(继承,多态) ---- 类和对象的关系 使用new关键字创建对象时 分配内存空间 给创建好的对象进行默认的初始化(以及调用类的构造函数——构造器) 类的构造器 也称类的构造方法...,还是子类方法,主要看这个对象是以哪一个类定义出来的,看等号左边那个类。...方法需要重写 (有个别方法不能重写,比如static方法属于类,不属于实例;final修饰的常量方法也不能被重写,private修饰的私有方法也不能重写) 父类可以引用指向子类对象 Father...); //报错,通过类名——不能访问非静态变量 // (因为静态变量和类同时创建,非静态变量要等到对象实例化时候才创建,所以非静态变量只能通过实例对象来调用) System.out.println

1K20

老司机读书笔记——Effective Objective-C 2.0阅读笔记

访问实例变量不会触发KVO -init及-dealloc方法中应使用实例变量 对象内部应尽量遵守如下原则:取值采用实例变量,赋值采用属性。 ---- 2.消息转发机制流程 ?...---- 5.在-dealloc中只释放引用并解除监听 在-dealloc方法里,应该做的事情就是释放指向其他对象的引用,并取消原来订阅的“键值观测”(KVO)或NSNotificationCenter...如果对象持有文件描述符等系统资源,那么应该专门编写一个方法来释放此种资源。这样的类要和其他使用者约定:用完资源后必须调用close方法。...---- 6.以自动释放池降低内存峰值 比方说,在循环中不断地创建的临时对象。即便这些对象在调用完方法之后就就不在使用了,他们也依然处于存活状态,因为目前还在自动释放池里,等待系统稍后将其释放并回收。...与其他方法不同,+load方法不参与覆写机制。 首次使用某个类之前,系统会向其发送+initialize消息。由于此方法遵从普通的覆写机制,所以通常应该在里面判断当前要初始化的是哪个类。

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

    String 详解以及内存分析

    Java 没有内置的字符串类型,而是在标准 Java 类库中提供了一个预定义的类String,每个用双引号括起来的字符串都是 String 类的一个实例。...因为 String 类重写了 equals 方法。...实际上这个过程中只是 gh 这个引用的指向在改变,"a"、"a0"、"a01" 并没有被改变。 注:这是我画的几个草图为了帮助大家理解,实际上字符串的内存分析要比这个复杂点。 ? ? ?...StringBuilder 对象的创建在循坏外面,这样就只创建了一个对象,比较好。 总结 我们在循环体中需要尽量避免隐式或者显式创建 StringBuilder。...其实对于循坏来说,尽量避免在循坏里创建对象,可以将创建对象这个操作放在循坏外面,这样我们就让这个对象达到复用了。

    80120

    App性能优化浅谈

    但我们应该可以知道垃圾回收器的作用: 分配内存 保证所有正在被引用的对象还存在于内存中 回收执行代码已经不再引用的对象所占的内存 对象引用 Java的引用类型可以分为以下几种: 强引用(Strong Ref...优化点: 对常量使用static修饰符 使用静态方法 减少不必要的成员变量 尽量不要使用枚举,少用迭代器 对Cursor、Receiver、Sensor、File等对象,要注意它们的创建、回收与注册、反注册...()方法解析视图 注:这里引用了Android群英传的相关优化点 创建新的对象都需要额外的内存空间,要尽量减少创建新的对象。...将类、变量、方法等等的可见性修改为最小。 针对字符串的拼接,使用StringBuffer替代String。 不要在循环当中声明临时变量,不要在循环中捕获异常。...如果对于线程安全没有要求,尽量使用线程不安全的集合对象。 使用集合对象,如果事先知道其大小,则可以在构造方法中设置初始大小。 文件读取操作需要使用缓存类,及时关闭文件。

    2.2K30

    Nebula3学习笔记(3): 核心库

    对象的生命周期 一个由类名创建C++对象实例的工厂机制 一个中央Server对象用于建立基本的Nebula3运行环境 对象模型 Nebula3在C++对象模型的基础之上实现了下面这些新特性: 基于引用计数和智能指针的生命周期管理...基于类名或四字符编码的对象创建 一个运行时类型信息系统 实现一个新的Nebula3类 当实现一个新的类时首先要考虑它是一个传统的C++类还是要从Core::RefCounted继承....从Core::RefCounted类继承有一些限制: RefCounted派生类不应该在栈上创建对象, 因为栈对象的生命周期是由C++来管理的(他们会在离开当前上下文时被销毁, 从而绕过了Nebula3...这导致的性能消耗一般是可以忽略的, 但是你最好保证它不在内部循环中发生. 应该销毁的对象还存在: 因为智能指针管理的对象只有在最后一个引用放弃时才会销毁, 这样会使对象存在超过预订的时间....创建Nebula3对象 从Core::RefCounted继承的类可以通过3种不同的方式进行创建: 直接通过静态的Create方法: PtrmyObj=MyClass::Create(

    616110

    精选面试题教你应对高级iOS开发面试官(提供底层进阶规划蓝图)

    ;他们之间可能进行赋值操作,为确保对象中的字符串值不会无意间变动,应该在设置新属性值时拷贝一份。...(分别考虑类方法和实例方法) 每一个类对象中都一个方法列表,方法列表中记录着方法名称、方法实现、参数类型,其实selector本质就是方法名称,通过这个方法名称就可以在方法列表中找到对应的方法实现....引用 调用free() objc中的类方法和实例方法有什么本质区别和联系?...类方法: 类方法是属于类对象的 类方法只能通过类对象调用 类方法中的self是类对象 类方法可以调用其他的类方法 类方法中不能访问成员变量 类方法中不能直接调用对象方法 实例方法: 实例方法是属于实例对象的...实例方法只能通过实例对象调用 实例方法中的self是实例对象实例方法中可以访问成员变量 实例方法中直接调用实例方法 实例方法中也可以调用类方法(通过类名)方法 runloop和线程有什么关系?

    55100

    Java 高并发综合

    并发编程 Java中如何创建一个线程 从面相接口的角度上讲,实际上只有一种方法实现Runable接口;但Thread类为线程操作提供了更多的支持,所以通常做法是实现Runable接口,实例化并传入Thread...synchronized修饰方法和修饰代码块时有何不同 持有锁的对象不同: 修饰方法时:this引用的当前实例持有锁 修饰代码块时:要指定一个对象,该对象持有锁 从而导致二者的意义不同: 同步代码块在锁定的范围上可能比同步方法要小...为什么wait, notify 和 notifyAll这些方法不在thread类里面? 主要原因是JAVA提供的锁是对象级的而不是线程级的,每个对象都有锁,通过线程获得。...为什么你应该在循环中检查等待条件? 处于等待状态的线程可能会收到错误警报和伪唤醒,如果不在循环中检查等待条件,程序就会在没有满足结束条件的情况下退出。...而AtomicInteger类提供的atomic方法可以让这种操作具有原子性如getAndIncrement()方法会原子性的进行增量操作把当前值加一,其它数据类型和引用变量也可以进行相似操作。

    89130

    Java 高并发综合

    并发编程 Java中如何创建一个线程 从面相接口的角度上讲,实际上只有一种方法实现Runable接口;但Thread类为线程操作提供了更多的支持,所以通常做法是实现Runable接口,实例化并传入Thread...synchronized修饰方法和修饰代码块时有何不同 持有锁的对象不同: 修饰方法时:this引用的当前实例持有锁 修饰代码块时:要指定一个对象,该对象持有锁 从而导致二者的意义不同: 同步代码块在锁定的范围上可能比同步方法要小...为什么wait, notify 和 notifyAll这些方法不在thread类里面? 主要原因是JAVA提供的锁是对象级的而不是线程级的,每个对象都有锁,通过线程获得。...为什么你应该在循环中检查等待条件? 处于等待状态的线程可能会收到错误警报和伪唤醒,如果不在循环中检查等待条件,程序就会在没有满足结束条件的情况下退出。...而AtomicInteger类提供的atomic方法可以让这种操作具有原子性如getAndIncrement()方法会原子性的进行增量操作把当前值加一,其它数据类型和引用变量也可以进行相似操作。

    98560

    iOS - 老生常谈内存管理(二):从 MRC 说起

    不要在初始化方法和 dealloc 中使用访问器方法 你不应该在初始化方法和dealloc中使用访问器方法来设置实例变量,而是应该直接操作实例变量。...super是编译器指令,使用super调用方法是从当前消息接收者类的父类中开始查找方法的实现,但消息接收者还是子类。...要注意调用过程中,父类的init方法中的self还是子类。...在init中,我们会调用self = [super init]对父类的东西先进行初始化,即子类先调用父类的init方法(注意: 调用的父类的init方法中的self还是子类对象)。...相反,如果你有一个类的实例管理稀缺的资源,你应该在你不再需要这些资源时让该实例释放这些资源。然后,你通常会release该实例,紧接着它dealloc。

    1.6K21

    SqlSession和SqlSessionFactory「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 SqlSessionFactoryBuilder   这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。...因此 SqlSessionFactoryBuilder 实例的最佳范围是方法范围(也就是局部方法变量)。...你可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例,但是最好还是不要让其一直存在以保证所有的 XML 解析资源开放给更重要的事情。...SqlSessionFactory   SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进行清除或重建。...绝对不能将 SqlSession 实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。

    39110

    Python weakref (弱引用 ) 教程

    但是关于weakref,官网上给的例子,并不能让我们理解这个弱引用。 于是在网上查了一些资料,也是比较模糊。 于是我还是从变量到垃圾回收再到若弱引用讲起这件事吧。...__del__ 特殊方法.不会销毁实例,不应该在代码中调用。即将销毁实例时,Python 解释器会调用 __del__ 方法,给实例最后的机会,释放外部资源。 参考标准库del特殊方法....In [169]: def bye(): # 回调函数一定不能是要销毁的对象的绑定方法(类方法),否则会有一个指向对象的引用。...finalize (内部使用弱引用) 如果一个类需要知道所有实例,一种好的方案是创建一个 WeakSet 类型的类属性,保存实例的引用。...如果使用常规的 set ,实例永远不会被垃圾回收,因为类中有实例的强引用,而类存在的时间与 Python 进程一样长,除非显式删除类。

    1.1K50

    将XML导入到对象中

    创建XML读取器概述IRIS提供了一些工具,用于读取XML文档并创建与该文档的元素相对应的启用XML的 IRIS对象的一个或多个实例。基本要求如下:该对象的类定义必须扩展%XML.Adaptor。...除了少数例外,该对象引用的类还必须扩展%XML.Adaptor。提示:如果相应的XML模式可用,可以使用它来生成类(以及任何支持的类)。...要导入XML文档,创建%XML.Reader的实例,然后调用该实例的方法。这些方法指定XML源文档,将XML元素与启用XML的类相关联,并将源中的元素读取到对象中。...它确定是否有任何启用了XML的对象与XML文档中包含的元素相关,并在读取文档时创建这些对象的内存中实例。请注意,%XML.Reader创建的对象实例不存储在数据库中;它们是内存中的对象。...如果在此之后再次调用next(),则将从文件顶部开始再次循环遍历文件中的对象。(指定的关联仍然有效。)错误检查上一节提到的大多数方法都返回状态。应该在每个步骤之后检查状态,并在适当的情况下退出。

    1.6K10

    java1.8中Object类源码分析

    类Object的equals方法在对象上实现了最有区别的等价关系,也就是说,对于任何非空引用值x和y,当且仅当x和y引用的是同一对象的时候,x==y返回true。...通常,这意味着复制构成的被clone的对象内部的深层结构的任何对象,并将这些对象的引用替换为对副本的引用。如果一个类只包含原始字段或者引用不可变对象,那么通常情况下super.clone需要修改。...否则,此方法将创建一个此对象的实例,并使用该对象的相应字段的内容来初始化其所有字段,就像通过赋值一样,字段内容本身不会被clone,此方法执行的是对象的浅拷贝,而不是深拷贝。...timeout和nanos参数指定的超时时间已过时。 线程之后进入等待状态,直到他可以重新获得monitor并执行。 在一个版本中,中断和虚假的唤醒操作是可能的,这个方法应该在循环中使用。...在另外一个参数版本中,中断和虚假的weakup是可能的,这个方法应该在循环中使用。

    42940

    双重检查锁定及单例模式

    如果不保护 getInstance() 方法,则可能返回 Singleton 对象的两个不同的实例。...线程 1 执行,由于在 //2 处实例仍旧为 null,线程 1 还创建一个 Singleton 对象并将其引用赋值给 instance。...针对 Java 技术的 IBM SDK 1.3 版和 Sun JDK 1.3 都生成这样的代码。然而,这并不意味着应该在这些实例中使用双重检查锁定。该习语失败还有一些其他原因。...StringCreator 类进入到一个无限循环中并且使用值“hello”在 //1 处创建 String 对象。...如果 String 类是不变的,则从此程序应当看不到任何输出。如果发生了无序写入问题,则使 StringReader 看到 str 引用的惟一方法绝不是值为“hello”的 String 对象。

    1.8K30

    如何学习框架

    方法一: *以各种方式了解这个框架产生的原因,及其主要解决的问题。1% *观察其主要外部接口(这里的外部接口是指公有类型)的使用场景,理解它的核心概念。...5% *做些简单实例10% 简单的例子来一边实践一边学习,使用一些时间,主要目的是在过程中加深对核心概念的理解。 *把里面比较重要的类列举出来,说明它们都是干什么用的。...other% 方法二:(此法不满足螺旋上升的理论,因为不可用于过大的框架。) *了解框架产生原因,及主要解决的问题。 *了解其主要外部接口(这里的外部接口是指公有类型)的使用场景,理解它的核心概念。...而且是全英文的,看书的速度也变慢。我在看的时候也一点都没有跟实践结合,而是直接去学习wpf原理、思想、结构。当时想的是应该把总体思想理解清楚了,再实践。    ...应该在看书的时候,辅以实践,甚至以实践为主。这一条不一定对所有的书都适用。如果是其它类型的书籍,应该在看书前想好,是理论优先,还是更重实践。     学习应该循续渐进,由浅入深,逐渐系统化。

    62980

    编写高效的Android代码

    尽可能避免创建对象(Object) 对象的创建并不是没有代价的。一个带有线程分配池的generational的内存管理机制会使创建临时对象的代价减少,不是分配内存总比不上不分配内存好。...如果你在一个用户界面的循环中分配一个对象,你不得不强制的进行内存回收,那么就会使用户体验出现稍微“打嗝”的现象。 因此,如果没有必要你就不应该创建对象实例。...因为这些方法使用C/C++来实现的,要比在一个java循环中做同样的事情快10-100倍。...虚方法的调用会产生很多代价,比实例属性查询的代价还要多。我们应该在外部调用时使用Get和Set函数,但是在内部调用时,我们应该直接调用。...; 当一个类第一次使用时,编译器会调用一个类初始化方法——` ,这个方法将42存入变量intVal ,并且为strVal` 在类文件字符串常量表中提取一个引用,当这些值在后面引用时,就会直接属性调用。

    61330

    必会的 55 个 Java 性能优化细节!一网打尽!

    3、尽量避免过多过常地创建 Java 对象 尽量避免在经常调用的方法,循环中 new 对象,由于系统不仅要花费时间来创建对象,而且还要花时间对这些对象进行垃圾回收和处理,在我们可以控制的范围内,最大限度地重用对象...5、尽量使用局部变量 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快;其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。...19、尽量早释放无用对象的引用 大部分时,方法局部引用变量所引用的对象会随着方法结束而变成垃圾,因此,大部分时候程序无需将局部,引用变量显式设为 null。 例如: Java 代码 ?...33、不要在循环中使用 Try/Catch 语句,应把 Try/Catch 放在循环最外层 Error 是获取系统错误的类,或者说是虚拟机错误的类。...38、不用 new关 键字创建对象的实例 用 new 关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。

    2.9K10

    Java单例模式中双重检查锁的问题

    如果不保护 getInstance() 方法,则可能返回Singleton 对象的两个不同的实例。...线程 1 执行,由于在 //2 处实例仍旧为 null,线程 1 还创建一个 Singleton 对象并将其引用赋值给 instance。...针对 Java 技术的 IBM SDK 1.3 版和 Sun JDK 1.3 都生成这样的代码。然而,这并不意味着应该在这些实例中使用双重检查锁定。该习语失败还有一些其他原因。...StringCreator 类进入到一个无限循环中并且使用值“hello”在 //1 处创建 String 对象。...如果 String 类是不变的,则从此程序应当看不到任何输出。如果发生了无序写入问题,则使 StringReader 看到 str 引用的惟一方法绝不是值为“hello”的 String 对象。

    1.9K20
    领券