Java基础知识回顾,看看你们忘了多少

lanqiao 发表了文章 • 0 个评论 • 14 次浏览 • 3 天前 • 来自相关话题

  1、Java中成员变量又分为实例成员变量 和类成员变量。 2、写类的目的是为了描述一类事物共有的属性 和功能。 3、成员变量和局部变量的类型可以是Java中的任何一种数据类型 。 4、用修饰符 sta ...查看全部
 
1、Java中成员变量又分为实例成员变量 和类成员变量。
2、写类的目的是为了描述一类事物共有的属性 和功能。
3、成员变量和局部变量的类型可以是Java中的任何一种数据类型 。
4、用修饰符 static 说明的成员变量是类变量。
5、变量的名字与成员变量的名字相同,则成员变量被隐藏 ,该成员变量在这个方法内暂时失效。
6、用修饰符static说明的成员变量是类变量 。
7、如果局部变量的名字与成员变量的名字相同,成员变量 将被隐藏。
8、方法定义包括两部分:方法声明 和方法体。
9、在Java中,当一个方法不需要返回数据时返回类型必须是 void 。
10、方法重载 是指,一个类中可以有多个方法具有相同的名字和类型,但这些方法的参数必须不同。
11、在Java程序语言中,它允许在一个class中有几个方法,都有相同的名字,这种用法称为方法重载 。
12、构造方法 是一种特殊方法,它的名字必须与它所在的类的名字完全相同,并不返回任何数据类型。
13、Java中类的方法分为实例方法和类方法。
14、因为类体的内容由成员变量的定义和成员方法的定义两部分组成,对成员变量的操作只能放在成员方法 中。
15、Java中构造方法与类名相同,没有返回值,在创建对象实例时由new运算符自动调用。
16、在类方法中只能调用类变量和类方法,不能调用实例 方法。

17、实例方法既能对类变量操作也能对实例变量操作,而类方法只能对类变量 进行操作。18、Java中类 是创建对象的模板。
19、当使用一个类创建了一个对象 时,我们也说给出了这个类的实例。
20、Java中用类创建一个对象包括对象的声明和为对象分配内存 两个步骤。
21、对象声明的一般格式为类名 对象名 。

22、一个类通过使用 new 运算符可以创建多个不同对象,这些对象将分配不同得内存空间。
23、一个类通过使用new运算符和类的构造方法 为声明的对象分配内存。
24、对象创建完后,通过使用运算符“.”,对象可以实现对变量的访问和方法 的调用。
25、Java中不同对象的实例变量将被分配不同的内存空间。
26、Java中如果类中的成员变量有类 变量,那所有的对象的给这样的变量分配给相同的一处内存。

27、类方法和实例方法的区别在于类方法不但可以由对象调用还可以直接由类名 调用,而实例方法却不可以。
28、类方法 方法不但可以由对象调用还可以直接由类名调用,而实例方法却不可以。
29、类体中的方法分为:实例方法和类方法。
30、package 语句作为java源文件的第一条语句指明该源文件定义的类所在的包。
31、在java程序中,系统会自动引入java.lang这个包,因此不需要再使用 import 语句引入该包。

32、在java程序中,为了使程序能够使用自定义的包,必须在 classpath 环境变量中指明自定义包的位置。
33、java.lang 包是java语言的核心类库,它包含了运行java程序必不可少的系统类。
34、为了能使用Java提供的类,我们可以使用语句 import 来引入所需的类。
35、Java中用 private 修饰的成员变量和方法称为私有变量和私有方法。
36、Java中不用修饰的成员变量称为友好 变量。

37、访问权限是私有 变量,只能在本类中使用,不能在类外使用。
38、Java中用 public 修饰的成员变量和方法称为共有变量和共有方法。
39、访问权限是共有 变量,不但在本类中使用,还可以在任何另外一个类中使用。
40、访问权限是友好 变量,只能在本类和与本类同一个包中的其他类使用。
41、继承 是一种由已有的类创建新类的机制。

42、Java中由继承而得到的类称为子类 ,被继承的类称为父类。
43、Java中不支持多重 继承。
44、在类的声明中,通过使用关键字 extends 来创建一个类的子类。
45、Java中一个类可以有 1 个父类。
46、如果一个类的声明中没有使用extends关键字,这个类被系统默认为是 Object 类的子类。

47、子类自然地继承了其父类中不是 private 的成员变量作为自己的成员变量。
48、当子类中定义的成员变量和父类中的成员变量同名时,子类的成员变量隐藏 了父类的成员变量。
49、子类通过成员变量的隐藏和方法的重写 可以把父类的状态和行为改变为自身的状态和行为。
 
 
来源:云溪社区
网址:https://yq.aliyun.com/articles/125155?spm=5176.8091938.0.0.ieTHK0

Java程序员应当知道的10个面向对象设计原则

lanqiao 发表了文章 • 0 个评论 • 26 次浏览 • 4 天前 • 来自相关话题

面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) 、 Decorator(装饰器)、Observer(观察者) 等设计模式,而没有把足够多的注意力放在学习面向对象的分析和设计上面。学习面向对象编程像“抽 ...查看全部
面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) 、 Decorator(装饰器)、Observer(观察者) 等设计模式,而没有把足够多的注意力放在学习面向对象的分析和设计上面。学习面向对象编程像“抽象”、“封装”、“多态”、“继承” 等基础知识是重要的,但同时为了创建简洁、模块化的设计,了解这些设计原则也同等重要。我经常看到不同经验水平的java程序员,他们有的不知道这些OOPS 和SOLID设计原则,有的只是不知道一个特定的设计原则会带来怎样的益处,甚至不知道在编码中如何使用这些设计原则。

(设计原则)底线是永远追求高内聚、低耦合的编码或设计。 Apache 和 Sun的开源代码是学习Java和OOPS设计原则的良好范例。它们向我们展示了,设计原则在Java编程中是如何使用的。Java JDK 使用了一些设计原则:BorderFactory类中的工厂模式、Runtime类中的单例模式、java.io 类中的装饰器模式。顺便说一句,如果您真的对Java编码原则感兴趣,请阅读Joshua Bloch 的Effective Java,他编写过Java API。我个人最喜欢的关于面向对象设计模式的是Kathy Sierra的Head First Design Pattern(深入浅出设计模式),以及其它的关于深入浅出面向对象分析和设计。这些书对编写更好的代码有很大帮助,充分利用各种面向对象和SOLID的设计模式。

虽然学习设计模式(原则)最好的方法是现实中的例子和理解违反设计原则带来的不便,本文的宗旨是向那些没有接触过或正处于学习阶段的Java程序员介绍面向对象设计原则。我个人认为OOPS 和SOLID设计原则需要有文章清楚的介绍它们,在此我一定尽力做到这点,但现在请您准备浏览以下设计模式(原则) :)
 
DRY – Don’t repeat yourself
我们第一个面向对象设计原则是:DRY ,从名称可以看出DRY(don’t repeat yourself)意思是不写重复代码,而是抽象成可复用的代码块。如果您有两处以上相同的代码块,请考虑把它们抽象成一个单独的方法;或者您多次使用了硬编码的值,请把它们设置成公共常量。这种面向对象设计原则的优点是易于维护。重要的是不要滥用此原则,重复不是针对代码而是针对功能来说。它的意思是,如果您使用通用代码来验证OrderID和SSN,这并不意味着它们是相同的或者他们今后将保持不变。通过把通用代码用于实现两种不同的功能,或者您把这两种不同的功能密切地联系在一起;当您的OrderID格式改变时,您的SSN验证代码将会中断。所以要当心这种耦合,而且不要把彼此之间没有任何关系却类似的代码组合在一起。
 
封装经常修改的代码
Encapsulate What Changes
在软件领域永远不变的是“变化”,所以把您认为或怀疑将来要被修改的代码封装起来。这种面向对象设计模式的优点是:易于测试和维护恰当封装的代码。如果您在用Java编程,那么请遵守以下原则:变量和方法的访问权限默认设置为私有,并且逐步放开它们的访问权限,例如从“private”到“protected ”、“not public”。Java中的一些设计模式使用了封装,工厂设计模式就是一个例子,它封装了创建对象的代码而且提供了以下灵活性:后续生成新对象不影响现有的代码。
 
打开/关闭设计原则
OpenClosed Design Principle
类、方法/函数应当是对扩展(新功能)开放,对修改闭合。这是另外一个优雅的SOLID 设计原则,以防止有人修改通过测试的代码。理想情况下假如您添加了新功能,那么您的代码要经过测试,这就是打开/关闭设计原则的目标。顺便说一句,SOLID中的字母“O”指的是打开/关闭设计原则。
 
单一职责原则
Single Responsibility Principle(SRP)
单一职责原则是另外一个SOLID设计原则,SOLID中的字母“S”指的就是它。按照SRP,一个类修改的原因应当有且只有一个,或者一个类应当总是实现单一功能。如果您在Java中的一个类实现了多个功能,那么这些功能之间便产生了耦合关系;如果您修改其中的一个功能,您有可能就打破了这种耦合关系,那么就要进行另一轮测试以避免产生新的问题。
 
依赖注入/反转原则
Dependency Injection or Inversion principle
不要问框架的依赖注入功能将会给你带来什么益处,依赖注入功能在spring框架里已经很好的得到了实现,这一设计原则的优雅之处在于:DI框架注入的任何一个类都易于用模拟对象进行测试,并且更易于维护,因为创建对象的代码在框架里是集中的而且和客户端代码是隔离的。有多种方法可以实现依赖注入,例如使用字节码工具,其中一些AOP(面向切面编程)框架如切入点表达式或者spring里使用的代理。想对这种SOLID设计原则了解更多,请看IOC 和 DI设计模式中的例子。 SOLID中的字母“D”指的就是这种设计原则。
 
优先使用组合而非继承
Favor Composition over Inheritance
如果可以的话,要优先使用组合而非继承。你们中的一些人可能为此争论,但我发现组合比继承更有灵活性。组合允许在运行时通过设置属性修改一个类的行为,通过使用多态即以接口的形式实现类之间的组合关系,并且为修改组合关系提供了灵活性。甚至 Effective Java也建议优先使用组合而非继承。
 
里氏替换原则
Liskov Substitution Principle LSP
根据里氏替换原则,父类出现的地方可以用子类来替换,例如父类的方法或函数被子类对象替换应该没有任何问题。LSP和单一职责原则、接口隔离原则密切相关。如果一个父类的功能比其子类还要多,那么它可能不支持这一功能,而且也违反了LSP设计原则。为了遵循 LSP SOLID设计原则,派生类或子类(相对父类比较)必须增强功能,而非减少。SOLID中的字母“L”指的就是 LSP设计原则。
 
接口隔离原则
接口隔离原则指,如果不需要一个接口的功能,那么就不要实现此接口。这大多在以下情况发生:一个接口包含多种功能,而实现类只需要其中一种功能。接口设计是一种棘手的工作,因为一旦发布了接口,您就不能修改它否则会影响实现该接口的类。在Java中这种设计原则的另一个好处是:接口有一个特点,任何类使用它之前都要实现该接口所有的方法,所以使用功能单一的接口意味着实现更少的方法。
 
编程以接口(而非实现对象)为中心
编程总是以接口(而非实现对象)为中心,这会使代码的结构灵活,而且任何一个新的接口实现对象都能兼容现有代码结构。所以在Java中,变量、方法返回值、方法参数的数据类型请使用接口。这是许多Java程序员的建议, Effective Java 以及 head first design pattern 等书也这样建议。
 
代理原则
不要期望一个类完成所有的功能,可以适当地把一些功能交给代理类实现。代理原则的典范是:Java 中的equals() 和 hashCode() 方法。为了比较两个对象的内容是否相同,我们让用于比较的类本身完成对比工作而非它们的调用方。这种设计原则的好处是:没有重复编码而且很容易修改类的行为。
 
总结
以上所有面向对象的设计原则可以帮助您写出灵活、优雅的代码:具有高内聚低耦合的代码结构。理论只是第一步,更重要的是我们要习得一种能力去发现什么时候使用这些设计原则。去发现我们是否违反了什么设计原则和影响了代码的灵活性,但是世界上没有什么是完美的,我们解决问题时不能总去使用设计模式和设计原则,它们大多用于有较长维护周期的大型企业项目。