初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

  • JAVA特点:
  1. 语法简单,学习容易
  2. 功能强大,适合各种应用开发:J2SE/J2ME/J2EE
  3. 面向对象,易扩展,易维护
  4. 容错机制好,在内存不够时仍能不崩溃、不死机
  5. 强大的网络应用功能
  6. 跨平台:JVM,字节码
  • 两个命令:
  1. javac helloworld.java:将Java文件编译为字节码的.class文件
  2. java helloworld:运行Java程序。。。??暂时这么认为
  • 数据类型:
  1. 普通数据类型:int a=3;
  2. 对象数据类型:使用关键字new,String s=new String("hello world");
  • public/friendly/protected/private:
  1. public:整个项目可见
  2. friendly:默认,在包(package)内可见
  3. protected:本类和子类可见
  4. private:只有本类可见,子类也不可见
  5. 还有一点就是:不同的包中,对于protected的方法,你可以继承它,但是你不能访问它!
  • 静态方法和抽象方法:
  1. 静态方法:不需实例化对象就可以调用的方法,如Math math=new Math();math.sin(60)==>Math.sin(60)。
  2. 抽象方法:只有方法名而没有方法体的方法,必须被继承,在子类中去实现的方法。
  • 垃圾回收机制与Finalize语句段
  1. 与C++的析构函数相比,Java不需要考虑销毁对象的问题。Java有垃圾回收机制(GC)在适当的时候自动释放资源。
  2. Java的GC机制从本质上说是运行在JVM内的一个独立的程序,它随JVM的装载而开始运行,随JVM的关闭而关闭。
  3. GC程序优先级很低,只有在系统空闲或内存不足时,才会被调用,而不受程序员的控制。
  4. 真是因为存在GC机制,所以程序员无法在代码中强制释放内存;即使我们通过System.gc()方法,也无法强制开始内存回收,它只是建议JVM的GC程序可以开始回收工作罢了。
  5. finalize函数常用来做一些回收工作,但他的执行完全是由JVM的GC机制决定,不受程序员控制。
  6. 虽然程序员不能控制GC机制,但还是建议:

1)对象不用后置为null,让JVM“感受”到对象已经不用,可以被收集了。

2)对于数据库对象和I/O对象,用完后要调用close方法,以释放他们占用的资源。如果不调用close(),JVM的GC机制只能释放这些对象占用的内存,而不能释放他们打开的资源,这种内存资源无法回收的现象叫做“内存泄露”,严重时会使JVM崩溃。

  • 封装、继承、多态——面向对象的三大要素
  1. 封装:简单说就是把属性和方法抽象成类
  2. 继承:子类只能继承在父类中可以访问的属性和方法(实际上父类中私有的属性和方法也会被继承但子类中无法访问而已);Java只允许单继承,即不可以一个类同时继承两个父类。构造函数不能继承。
  3. 多态:有二种方式,覆盖,重载。java方法覆盖:子类的一个方法和父类的某个方法完全一样(名称、参数签名、返回类型),那么说子类的方法覆盖了父类的方法。java方法重载:允许存在多个同名函数,而这些函数的参数表(参数个数或者参数类型)不同。               最常见的多态是不同的子类继承同一个父类的同一个方法,但实现各自特有的功能。
  1. Java接口和Java抽象类最大的一个区别,就是interface中只能定义方法,而不能有方法的实现;而在abstract class中则可以有方法的具体实现,又可以有没有具体实现的抽象方法,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法;而Java接口做不到这一点,如果向一个Java接口里加入一个 新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点。
  2. 子类只能单继承(继承某一个)抽象类,那么继承这个抽象类的子类类型就比较单一;而子类能够同时实现多个接口,因此类型就比较多。
  3. 相同点:接口和抽象类都可以定义对象,但是只能用他们的具体实现类来进行实例化。
  • 泛型

java泛型方法在方法返回值是【容器类对象】时广泛使用。public static List<T> find(Class<T> clazz,String userId){。。。}

一般来说编写java泛型方法时,返回值类型和至少一个参数类型应该是泛型而且类型应该【必须】是一致的。如果只有返回值类型或参数类型之一使用了泛型,这个泛型方法的使用就大大的限制了,基本限制到跟不用泛型一样的程度;如果类型不一致,会导致编译错误。

  • Java程序运行步骤:加载(根据字节码<.class文件>创建Class对象)、链接(验证类中的字节码,为静态域分配存储空间)、初始化(初始化静态数据)

不像C++在程序启动时就把所有的静态数据与执行代码载入到内存中,java根据需要在运行时把字节码载入到内存,它分三个步骤:

1、加载:类加载器查找到字节码(.class文件)并根据这些字节码创建一个Class对象;

2、链接:验证类中的字节码,为静态域分配存储空间,需要的话同时解析这个类其它类的所有引用;

3、初始化:当类的静态方法(构造器是特殊的静态方法)或者非常数静态域(即不是编译器常量)被首次引用时,执行静态初始化块和初始化静态数据。

  • 反射和RTTI
  1. Java中的每一个类都对应着一个Class对象(java.lang.Class)。通过这个Class对象你可以在运行时得到很多类中的有用的信息。用Class.forName来得到一个Class对象。Class c = Class.forName("MyClass");
  2. 不同:RTTI能够维护的类型都是编译时已知的类型,而反射可以使用一些在编译时完全不可知的类型。比如在进行一个远程调用时,类信息是通过网络传输过来的,编译器在编译时并不知道这个类的存在。
  3. 相同:其实反射和RTTI并没有什么本质的区别,因为java的类都是在运行是加载并解析的,而且两者通过Class对象来获取类型信息。不同的地方就是RTTI可以直接使用方法名来调用一个方法,而不必用字符串去执行一个方法。

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

时间: 2024-07-30 13:49:01

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)的相关文章

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E

Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ? 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以称为基类或超类,新建的类称为派生类或子类. ? 在Python中实现继承非常简单,在声明类的时候,在类名后面添加一个小括号,就可以完成继承关系.单纯的从代码的层面上来看当两个类具有相同的功能或者特征的时候就可以使用继承.提取一个父类,这个父类中编写者两个类相同的部分,然后两个类分别去继承这个类就可以

封装,继承,多态,接口

封装 封装的概述和好处: 是面向对象三大特征之一 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改. 封装原则: 将不需要对外提供的内容都隐藏起来. 把属性隐藏,提供公共方法对其访问. 成员变量private,提供对应的getXxx()/setXxx()方法 好处: 通过方法来控制成员变量的操作,提高了代码的安全性 把代码用方法进行封装,提高了代码的复用性 public class Student { String name; //int age

面向对象的三大特性(封装 继承 多态)

一丶封装 1 权限修饰符      可以用来修饰成员变量和成员方法,对于类的权限修饰只可以用public和缺省default.           被public修饰的类可以在任意地方被访问:default类只可以被同一个包内部的类访问.      权限由大到小:public protected default(不写) private           被private修饰的成员只能在本类中访问,外界不能访问 2 set()/get()方法  (1)this关键字    a.可以用来调用变量,

(转)Java垃圾回收机制

1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象:而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾.JVM的一个系统级线程会自动释放该内存块.垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃.当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用.事实上,除了释放没用的对象,垃圾回收也可以清除内存记录碎片.由于创建对象和垃圾回收器释放丢弃对象所占的内存空间,

Java的垃圾回收机制(转自:http://blog.csdn.net/zsuguangh/article/details/6429592)

1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象:而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾.JVM的一个系统级线程会自动释放该内存块.垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃.当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用.事实上,除了释放没用的对象,垃圾回收也可以清除内存记录碎片.由于创建对象和垃圾回收器释放丢弃对象所占的内存空间,

Java垃圾回收机制简要总结

1. 垃圾回收的意义 在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾.JVM的一个系统级线程会自动释放该内存块.垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃.当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用.事实上,除了释放没用的对象,垃圾回收也可以清除内存记录碎片.由于创建对象和垃圾回收器释放丢弃对象所占的内存空间,内存会出现碎片.碎片是分配给对象的内存块之间的空闲内存洞.碎片整理将所占用的堆内存移到堆的一

Java垃圾回收机制(转)

原文链接:Java垃圾回收机制 1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象:而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾.JVM的一个系统级线程会自动释放该内存块.垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃.当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用.事实上,除了释放没用的对象,垃圾回收也可以清除内存记录碎片.由于创建对象和垃圾回

【转】Java垃圾回收机制

原文出处:http://blog.csdn.net/zsuguangh/article/details/6429592 综合了若干人的blog- 1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象:而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾.JVM的一个系统级线程会自动释放该内存块.垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃.当一个对象不再被引用的时候,内存回收它占领的