- java接口中定义的变量在实现类中再次定义是被允许的,不会报变量定义过时的错误,奇怪?
- java的swing具有“封冻”的特点。具体不知道用途在哪里?
- 构造方法不会被继承,而父类却少了参数为空的构造方法时,子类是不能再建造参数为空的构造方法,原因就是创建子类时许依赖父类的默认构造方法。
- protected访问限制了只能是同目录下或它的子类是用,例如一个类的构造方法为protected,那么出了这个包外该对象实例是不能被创建的。
-
为提高性能而养成的一些编程习惯:
(1)尽量使用final,尽量试try——catch足够的小,尽量不要用static修饰符,尽量使用基础类型代替包装类,尽量不要重复创建对象(推选使用缓存),尽量在单线程中使用Stringbuild、HashMap,尽量使用finanlly释放系统资源,先记到这里,后面继续添加。
-
面向对象编程的特点就是封装、继承、多态而我们往往忽略了这些特点,既然可以继承那我们就需要把尽可能多的共同点抽象到父类中,这样就有牵一发动全身的目的,只修改父类的代码结构就可以满足需求的改变,既然有多态,那我们可以让底层框架实现不同的行为,其实这些好处是相对的,继承是高耦合的,所以对于不同的场景可以考虑聚合或组合,其实根据不同的场景我们可以考虑的使用设计模式思想编程,而设计模式就是应对不同场景设计的一种最优解决方案以达到高内聚低耦合的代码。
-
迪米特法则:如果两个类不彼此直接通信,那么两个类就不应该直接的发生关系。如果一个类需要调用另一个类的方法的话,可以通过第三者转发这个调用。
-
如何区分接口和抽象类:抽象类是对事物共同属性和行为的一种抽象,abstract说明这个对象是什么东西,而接口定义的是一种公共接口,interface说明这个对象有哪些方法。有的人说abstract也能定义抽象公用的方法,其实我们在细想我刚才说的,如果是abstract定义的公用方法,那说明这些方法是那一种特定类型的公用方法,而interface定义的是不同类型具有的公共方法接口。哈哈,如果你还迷糊就再看个实例,如果对于动物有运动run()的这个方法接口,空气,水,世间一切都有运动的特性,这时‘老天爷’说地球诞生了,一切都运动起来吧!这时就不应该再用抽象类定义统一接口了,而用该用interface定义统一接口,因为‘老天爷’只需要调用实现了interface对象的run()方法,这时世间一切都可以运动了。不知道你理解清楚抽象和接口的区别没。
-
依赖倒转原则:传统的过程性系统设计倾向于使高层次的模块依赖于低层次的模块;抽象层次依赖于具体层次。依赖倒转原则就是要把这种依赖关系倒转。即抽象不应该依赖细节,细节应该依赖抽象。要针对接口编程,不要针对实现编程。高层模块不应该依赖低层模块,两个都应该依赖抽象。
-
对于异常的处理,我个人理解,在业务层或底层我们尽量对异常进行抛出,而对于应用层我们需要对异常进行捕获并进行合理的处理。因为应用层决定着出异常时应该怎么做,总之,当有异常时我们无法判断出异常时怎么做那我们就对异常进行抛出,不要干那些越俎代庖的事。
-
反射是将程序从编译时延迟到运行时,如果不存在这个类那么该框架依赖该类就无法通过编译,如果利用反射,那么就将依赖延迟到运行时。其次,通过反射读取字符串也是可以在文件中变更,方便易维护易扩展。
- 如何定义类的构造方法是否需要添加那些参数:其一:一个类的创建必须具备该参数,例如一个人的出生,可以没有名字,但一定具有他的母亲。其二:为方便设置某些参数而使参数放在构造方法里,这些例子也是比较多的,你可以在JDK的源码中看到。
- 有些人抱怨static方法并不是“面向对象”的,因为它们具有全局函数的某些特点;利用static方法,我们不必向对象发送一条消息,因为不存在this。这可能是一个清楚的自变量,若您发现自己使用了大量静态方法,就应重新思考自己的策略。个人理解,static是面向某些集合对象的思想,其实也是一种便捷式面向对象的思想。
- Java提供了一个名为finalize()的方法,可为我们的类定义它。在理想情况下,它的工作原理应该是这样的:一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中,才会真正回收对象的内存。所以如果使用finalize(),就可以在垃圾收集期间进行一些重要的清除或清扫工作。
- “进行面向对象的设计时,一项基本的考虑是:如何将发生变化的东西与保持不变的东西分隔开。”
这一点对于库来说是特别重要的。那个库的用户(客户程序员)必须能依赖自己使用的那一部分,并知道一旦新版本的库出台,自己不需要改写代码。而与此相反,库的创建者必须能自由地进行修改与改进,同时保证客户程序员代码不会受到那些变动的影响。
为达到这个目的,需遵守一定的约定或规则。例如,库程序员在修改库内的一个类时,必须保证不删除已有的方法,因为那样做会造成客户程序员代码出现断点。然而,相反的情况却是令人痛苦的。对于一个数据成员,库的创建者怎样才能知道哪些数据成员已受到客户程序员的访问呢?若方法属于某个类唯一的一部分,而且并不一定由客户程序员直接使用,那么这种痛苦的情况同样是真实的。如果库的创建者想删除一种旧有的实施方案,并置入新代码,此时又该怎么办呢?对那些成员进行的任何改动都可能中断客户程序员的代码。所以库创建者处在一个尴尬的境地,似乎根本动弹不得。
为解决这个问题,Java推出了“访问指示符”的概念,允许库创建者声明哪些东西是客户程序员可以使用的,哪些是不可使用的。这种访问控制的级别在“最大访问”和“最小访问”的范围之间,分别包括:public,“友好的”(无关键字),protected以及private。根据前一段的描述,大家或许已总结出作为一名库设计者,应将所有东西都尽可能保持为“private”(私有),并只展示出那些想让客户程序员使用的方法。这种思路是完全正确的,尽管它有点儿违背那些用其他语言(特别是C)编程的人的直觉,那些人习惯于在没有任何限制的情况下访问所有东西。到这一章结束时,大家应该可以深刻体会到Java访问控制的价值。
然而,组件库以及控制谁能访问那个库的组件的概念现在仍不是完整的。仍存在这样一个问题:如何将组件绑定到单独一个统一的库单元里。这是通过Java的package(打包)关键字来实现的,而且访问指示符要受到类在相同的包还是在不同的包里的影响。所以在本章的开头,大家首先要学习库组件如何置入包里。这样才能理解访问指示符的完整含义。 - 为什么JAVA使用了不同的限定标识,例如 public、protected、private、default,这是我第一次有点深刻的理解到该标识的作用,设防我们站在不同的角度思考问题,如果你是“类创建者也就是库开发者”那么你此时希望给“库使用者”提供最少的public接口,这样才能使以后库的改动最灵活,当只希望该库中的类使用该方法那么就是用private修饰,如果考虑到该库中的包使用那就是用default限定,所以当你站在库开发者的角度时,那么就很容易理解JAVA限定符的作用了。
- 再论到底选择合成还是继承
无论合成还是继承,都允许我们将子对象置于自己的新类中。大家或许会奇怪两者间的差异,以及到底该如何选择。
如果想利用新类内部一个现有类的特性,而不想使用它的接口,通常应选择合成。也就是说,我们可嵌入一个对象,使自己能用它实现新类的特性。但新类的用户会看到我们已定义的接口,而不是来自嵌入对象的接口。考虑到这种效果,我们需在新类里嵌入现有类的private对象。
有些时候,我们想让类用户直接访问新类的合成。也就是说,需要将成员对象的属性变为public。成员对象会将自身隐藏起来,所以这是一种安全的做法。而且在用户知道我们准备合成一系列组件时,接口就更容易理解。“属于”关系是用继承来表达的,而“包含”关系是用合成来表达的。 - 累积开发
继承的一个好处是它支持“累积开发”,允许我们引入新的代码,同时不会为现有代码造成错误。这样可将新错误隔离到新代码里。通过从一个现成的、功能性的类继承,同时增添成员新的数据成员及方法(并重新定义现有方法),我们可保持现有代码原封不动(另外有人也许仍在使用它),不会为其引入自己的编程错误。一旦出现错误,就知道它肯定是由于自己的新代码造成的。这样一来,与修改现有代码的主体相比,改正错误所需的时间和精力就可以少很多。
类的隔离效果非常好,这是许多程序员事先没有预料到的。甚至不需要方法的源代码来实现代码的再生。最多只需要导入一个包(这对于继承和合并都是成立的)。
大家要记住这样一个重点:程序开发是一个不断递增或者累积的过程,就象人们学习知识一样。当然可根据要求进行尽可能多的分析,但在一个项目的设计之初,谁都不可能提前获知所有的答案。如果能将自己的项目看作一个有机的、能不断进步的生物,从而不断地发展和改进它,就有望获得更大的成功以及更直接的反馈。
尽管继承是一种非常有用的技术,但在某些情况下,特别是在项目稳定下来以后,仍然需要从新的角度考察自己的类结构,将其收缩成一个更灵活的结构。请记住,继承是对一种特殊关系的表达,意味着“这个新类属于那个旧类的一种类型”。我们的程序不应纠缠于一些细树末节,而应着眼于创建和操作各种类型的对象,用它们表达出来自“问题空间”的一个模型。 - final 与 空白final
final int i = 10; i = 100,这时是报错的;空白final为 final int j; 然后再初始化j。
- 浏览: 45538 次
- 性别:
- 来自: 西安
最新评论
-
ansjsun:
变量这个东西..可变的在继承中少用...你可以写抽象方法... ...
java中到底是继承父类变量还是访问父类变量 -
jackra:
如果如文中所述此处不应用继承而应使用聚合private在继承体 ...
java中到底是继承父类变量还是访问父类变量 -
audrey1226:
第2条, 在SWING中用的很多第9条, 在java的io包中 ...
Java中常用的设计模式 -
audrey1226:
Generally RuntimeExceptions are ...
让人吃惊的java exception异常 -
audrey1226:
keke8614 写道ohunbeyond 写道keke861 ...
java中到底是继承父类变量还是访问父类变量
相关推荐
资源名称:Java编程基础知识变量与数据类型资源目录:【】11957c6aed0bbd30e284837b53bc3a6f【】2.Java编程基础知识变量与数据类型1.数据类型初阶【】2.Java编程基础知识变量与数据类型10.浮点类型【】2.Java编程...
《Java编程基础知识点汇总及《JAVA程序设计》习题集》--答案
编程知识总结 编程知识总结编程知识总结编程知识总结
Java后端核心知识总结:并发编程篇 Java后端核心知识总结:MySQL篇 Java后端核心知识总结:Redis Java后端核心知识总结:RabbitMQ Java后端核心知识总结:Kafak Java后端核心知识总结:Dubbo篇 Java后端核心知识总结...
JAVA并发编程体系梳理脑图
6. Java可以用来进行多媒体及网络编程。( ) 答案:√ [考点范围] JAVA简介 7. Java语言具有较好的安全性和可移植性及与平台无关等特性。( ) 答案:√ [考点范围] JAVA简介 8. Java语言的源程序不是编译型的,...
Java程序设计知识点思维导图内容如下: 1、Java网络编程基础 2、输入流与输出流 3、继承与接口 4、JDBC与MySQL数据库 5、泛型与集合框架 6、Java多线程机制 7、类与对象 8、常用实用类 9、内部类、匿名类与Lambda...
《Java程序设计》通过对Java编程语言的全面介绍,引导读者快速地掌握Java编程语言的核心内容并学会灵活运用所学的语言知识及面向对象的编程思想。《Java程序设计》共分12章,内容包括Java语言概述、面向对象编程初步...
java网络编程相关知识java网络编程相关知识java网络编程相关知识java网络编程相关知识java网络编程相关知识java网络编程相关知识
本书内容由浅入深,紧密结合实际,利用大量典型实例,详细讲解Java面向对象的编程思想、编程语法和设计模式,介绍常见Java类库的用法,总结优化 Java编程的各种宝贵经验,深入阐述Java虚拟机执行Java程序的原理。...
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向...
Java编程基础知识点汇总习题集.pdfJava编程基础知识点汇总习题集.pdfJava编程基础知识点汇总习题集.pdfJava编程基础知识点汇总习题集.pdfJava编程基础知识点汇总习题集.pdfJava编程基础知识点汇总习题集.pdf
2018版 04747 Java语言程序设计(一)七八九十章知识点总结
java的垃圾回收将在程序运行过程中自动进行,无需程序员负责回收无用内存。 3.java环境变量配置: 在我的电脑>属性>高级>环境变量里的 path 中加入C:\Program Files\Java\jdk1.6.0\bin的路径(注:放在所有路径的最...
java网络编程相关知识2java网络编程相关知识2java网络编程相关知识2java网络编程相关知识2java网络编程相关知识2
习题集内容覆盖面广,包括:Java言的基本常识、基本语法、面向对象的基本概念、数组、字符串、异常处理、文件和数据流、图形用户界面设计、小应用程序、线程、编程规范、网络程序设计、多媒体民图形学程序设计以及...
本章将对Java做一个简单的介绍,并初步了解什么是Java应用程序,什么是Java小应用程序,有关的细节会在后续的章节中讨论。 1.1 Java的诞生 Java是1995年6月由Sun公司引进到这个世界的革命性的编程语言,它被美国的...
java面试各大知识点,非常齐全。jvm内存分区,gc算法,类加载机制。并发编程,并发编程各大容器,锁。框架spring mybatis原理,组件介绍。架构设计有设计模式,负载均衡。网络有协议,java 高并发io框架netty。数据...
Java基础知识点,内容比较全面。 目录: 1.1 Java中的引用概念 1.2 Java多线程相关知识 1.3 Java中的垃圾回收算法 1.4 Java IO流相关知识 ...1.13 Java代码优化编程 1.14 Java数组浅析 。。。。。。
java编程试题 主要练习java基础知识! java编程试题 主要练习java基础知识! java编程试题 主要练习java基础知识!