JAVA 基础知识

JAVA 纯面向对象语言, 有平台无关性,一次编译到处运行,编辑器会把java 代码变成中间代码,然后在JVM上解释执行。 拥有很多内置的类库, 提供了对Web 应用开发的支持,具有较好的安全和健壮性。

 

JAVA 和C++的异同 都是面向对象语言使用了面向对象的思想(封装,继承,多态),面向对象的特性(继承和组合)

  面向对象有以下特点:

  (1)面向对象是一种常见的思想,比较符合人们的思考习惯;

  (2)面向对象可以将复杂的业务逻辑简单化,增强代码复用性;

  (3)面向对象具有抽象、封装、继承、多态等特性。

  面向对象的编程语言主要有:C++、Java、C#等。

类和对象的关系

  类:

  对某类事物的普遍一致性特征、功能的抽象、描述和封装,是构造对象的模版或蓝图,用 Java 编写的代码都会在某些类的内部。类之间主要有:依赖、聚合、继承等关系。

  对象:

  使用 new 关键字或反射技术创建的某个类的实例。同一个类的所有对象,都具有相似的数据(比如人的年龄、性别)和行为(比如人的吃饭、睡觉),但是每个对象都保存着自己独特的状态,对象状态会随着程序的运行而发生改变,需要注意状态的变化必须通过调用方法来改变,这就是封装的基本原则。

封装思想

  核心思想就是“隐藏细节”、“数据安全”:将对象不需要让外界访问的成员变量和方法私有化,只提供符合开发者意愿的公有方法来访问这些数据和逻辑,保证了数据的安全和程序的稳定。

 使用 private 修饰符把成员变量设置为私有,防止外部程序直接随意调用或修改成员变量,然后对外提供 public 的 set 和 get 方法按照开发者的意愿

   public 修饰符,具有最大的访问权限,可以访问任何一个在 CLASSPATH 下的类、接口、异常等。

  protected 修饰符,主要作用就是用来保护子类,子类可以访问这些成员变量和方法,其余类不可以。

  default 修饰符,主要是本包的类可以访问。

  private 修饰符,访问权限仅限于本类内部,在实际开发过程中,大多数的成员变量和方法都是使用 private 修饰的。

继承和类实例化过程

* (2)Java 的继承机制是单继承,即一个类只能有一个直接父类。

* (3)如果子类和父类有同名成员变量和方法,子类可以使用 super 关键字调用父类的成员变量和方法,上述使用方式前提是成员在子类可见。

* (4)在调用子类构造方法时,会隐式的调用父类的构造方法 super()。如果父类没有无参构造方法,为了避免编译错误,需要在子类构造方法中显式的调用父类的含参构造方法。

* (6)当子类需要扩展父类的某个方法时,可以覆盖父类方法,但是子类方法访问权限必须大于或等于父类权限。

类的实例化过程

  (1)JVM 读取指定 classpath 路径下的 class 文件,加载到内存,如果有直接父类,也会加载父类;

  (2)堆内存分配空间;

  (3)执行父类、子类静态代码块;

  (4)对象属性进行默认初始化;

  (5)调用构造方法;

  (6)在构造方法中,先调用父类构造方法初始化父类数据;

  (7)初始化父类数据后,显示初始化,执行子类的构造代码块;

  (8)再进行子类构造方法的特定初始化;

  (9)初始化完毕后,将地址赋值给引用

 

多态、反射和组件解耦

多态指允许不同类的对象对同一“消息”做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。可以用于消除类型之间的耦合关系,Spring 的核心就是多态和面向接口编程。

 (1)Java 中可以使用父类、接口变量引用子类、实现类对象;

 (2)在这个过程中,会对子类、实现类对象做自动类型提升,其特有功能就无法访问了,如果需要使用,可以做强制类型转换。

 

1 )JAVA 为解释性语言,经过java 编辑器编译成字节码,然后给JVM 执行,C/C++ 为编译型语言,直接生成二进制代码,所以JAVA 执行速度慢,但是可以跨平台执行。

2)JAVA 纯面向对象,包扩所有的函数变量必须在类中实现,除了基本数据类型。JAVA不存在全局变量和全局变量函数。 C++ 兼有面向对象和面向过程的特点。

3)JAVA 中没有指针的概念

4)JAVA 不支持多重继承,但是可以实现多个接口。

5)C++需要开发人员对于管理内存分配,JAVA提供了垃圾回收器实现自动回收,JAVA没有析构函数,但是提供了finalize()方法。释放无用对象内存。

6)C++ 支持运算符重载,但是JAVA 不支持。    C++支持预处理,JAVA 提供了import 机制。JAVA 不支持结构和联合,所有的内容都封装在类里面。

7)JAVA 具有平台无关性。每种数据类型都分配了固定的长度。C++不同平台分配不同的字节数。

 

为什么使用 public static void main(String[] args) 

程序入口: JVM 运行时回首先找main 方法, 这个类被加载后就可以使用。不需要实例化,可以直接通过类型访问,类名.main() 来访问。 args 为开发人员在命令行下提供了程序交互手段。

1 public static void 没有先后顺序

2 main() 可以定义为 final 也可以用synchronized 修饰 但是返回值必须是void 并且有static 和public 修饰。 不能用abstract(抽象类不能有方法主体)

 

main 方法前输出Hello world 

静态块

java 实例化顺序

JAVA 作用域

public > protect > default >private

一个 JAVA 文件中可以定义多个类,但是只有一个类可以被public 修饰。并且这个类的名字必须与文件名相同,如果没有public 类,那就无所谓。

构造函数 

 1) 与类名相同。不能有返回值

2)可以有多个构造函数,没有的时候,编译成字节码的时候会提供无参构造函数。

3) 构造函数伴随着new 一起使用,由系统调用,实例化的时候自动执行,只调用一次。

4)构造函数不能被继承,但是可以重载。

5) 子类可以super 调用父类的构造函数,父类中没有无参构造函数的时候,子类必须显示调用父类中的构造函数。如果父类提供了无参构造函数的时候,构造起会自动调用父类的构造函数。

 

JAVA 中有些接口没有方法

因为没有多重继承,所以java 引入了接口,接口是抽象方法定义的集合。接口中成员的修饰符都是public 接口中的常量默认使用 public static final 修饰。

有些接口内部没有任何方法,说明不需要重写任何方法 ,仅仅作为标示接口,用来表面实现他的类属于一个特定的类型。

JAVA 中的clone 方法有什么用

1)复制函数返回的是一个新的对象而不是一个引用,实现clone 的类需要继承cloneable 接口,标示接口。

2)类中重写clone()方法。

3)clone方法中调用super.clone 无论clone 类的继承结构是什么,他都会直接或者间接的调用java.lang.Object 类的clone 方法。

 

C++中会存在浅复制和深复制,JAVA 也有这样的问题,类中包含一些对象的时候,就需要使用深复制,在对对象调用clone 方法完成复制后,对于非基本类型的属性调用clone 方法完成深复制。

Object 中的clone 被声明为protected的, 保证了类里面才能克隆 对象。

浅复制只考虑了复制的对象,而不会复制它引用的对象。深复制考虑被复制对象所有变量都含有与愿对象相同的的值。

什么是反射机制

放射机制可以是现在运行时对类进行装载。运行时动态的创建类的对象。

获取class 类:

1) class.forName(“类路径”)

2)类名.class

3)实例.class

4.1.12

 

posted @ 2018-07-18 14:27  dys_QAQ  阅读(182)  评论(0编辑  收藏  举报