您的位置:首页 > 职场人生

黑马程序员:java基础知识(一)

2014-04-16 23:14 134 查看
---------------------- ASP.Net+Unity开发 .Net培训、期待与您交流! ----------------------

一、java内存:堆内存和栈内存

在函数中定义的变量,包括基本数据类型的变量和对象的引用变量,都是在函数的栈内存中分配。

堆内存是用来存放有new关键字创建的对象和数组。在堆中分配的内存,由java虚拟机的自动垃圾回收器来管理。当一个对象或数组处于不可达状态时,java虚拟机就会不定时的启动垃圾回收器,把该对象作为垃圾进行回收。

二、面向对象

1、面向对象的三大特性:继承、封装、多态

继承:通过继承,可以简化类的定义;java只支持单继承,不允许多继承,但一个父类一个被多个子类继承;可以有多层继承,就是说一个类可以继承某个类的子类,如B类继承了A类,C类可以继承B类;子类继承父类的所有成员方法和成员变量,但不能继承父类的构造方法;在子类中,可以使用super()调用父类的构造方法;如果子类中没有显示的调用父类的构造方法,也没有使用this关键字调用重载的其他构造方法,则在产生子类的实力对象时,系统默认调用父类的无参数的构造方法。

封装:简单地说,就是在定义一个类的成员(变量或方法)时,使用private关键字来修饰,该成员就成了类的私有成员,只能被本类的其他成员调用,而不能被其他类的方法调用。实现封装的目的是,隐藏类的实现细节,让使用者只能通过事先定制好的方法来访问数据;可以方便的加入控制逻辑,限制对属性的不合理操作,便于修改,增强代码的可维护性;可进行数据检查。

多态:“用同一段代码,却有一两种或多种截然不同的结果”。应用程序不必为每个派生类(子类)编写功能调用,只需对抽象基类进行处理即可;派生类的功能可以被基类的方法或引用变量调用,即向后兼容,可以提高程序的可扩充性和可维护性。多态的两种表现形式有重载和重写。

2、对象的比较:“==”和“equals()”

“==”用于比较两个引用变量的值是否相等,这个值指的是对象在堆内存中的首地址。引用变量通过这个地址与堆内存中的对象相关联。

“equals()”用于比较两个对象的内容是否一致。最常用的是字符串的比较。如: "abc".equals("abc");

3、模块设计:强内聚、弱耦合

强内聚:许多功能尽量在类的内部完成,不让外面干预。

弱耦合:提供给外部尽量少的方法调用。

在程序设计中,应尽量避免一个模块直接修改或操作另一个模块的数据,即模块的设计追求强内聚、弱耦合。

4、构造方法

与类名相同,不含返回值类型,也就是没有返回值,在构造方法中不能使用return语句,构造方法可以被重载。

5、this关键字

this关键字在方法内部就是这个方法所属的对象的引用变量。每个成员方法内部都有一个this引用变量,指向调用该方法的对象。

几个必须使用this关键字的情况:

①方法的形参名与成员变量名相同,如:

public String name;

public Person(String name){

this.name = name; //使用this关键字区别成员变量和形参。

}

②假设有一个容器类和一个部件类,在容器类的某个方法中要创建部件类的实例对象,而部件类的构造函数方法需要接收一个代表其所在容器的参数。通过this引用把当前的对象作为一个参数传递给其它的方法或构造函数。

class Container{

Component comp;

public void addComponent(){

comp = new Component(this);//this代表的是当前的Container对象。

}

}

class Component{

Container myContainer;

public Component(Container c){

myContainer = c;

}

}

③在同一个类中,在某个构造方法中,调用其它构造方法时。

public Person(String name){

this.name = name;

}

public Person(String name,int age){

this(name);//使用this关键字调用上面的构造函数。

this.age = age;

}

6、垃圾回收策略:“复制式”和“自省式”

复制式:先将正在运行中的程序暂停,然后把正在被使用的所有对象,从他们的所在堆内存里复制到另一块堆内存中。

缺点:内存中的内容搬运复制,需要两倍的内存空间,即使没有垃圾或有少量垃圾,回收器仍然会将内容复制,效率低。

自省式:回收器会检测所有正在使用的对象,并标注。标注完成后将内存中所有处于“不可达状态”(不会再被使用的对象)的对象所占的内存空间一次性释放。

两种策略的交互:如果程序中的对象长期被使用,java虚拟机(JVM)就转至“自省式”模式,而当大量的垃圾或对象所占的内存不连续性的情况严重时,将转至“复制式”。

System.gc的作用是,强制启动垃圾回收器。

7、静态:“类的”、static

在类中使用static关键字修饰的成员被称为类成员。static修饰的变量被称为静态变量,也叫类的属性;static修饰的方法被称为类方法。类成员属于类,不属于类的某个实例对象。

在使用累的静态方法时,应注意以下几点:

①在静态方法里,可以直接调用同类中的其它静态成员,但不能直接访问类中的非静态成员。因为非静态成员属于类的实例对象,须要创建实力对象,才能访问。

②静态方法不能以任何方式引用this和super关键字。因为静态方法在使用前不用创建任何实力对象,当静态方法被调用时,this所引用的对象根本就不存在。super同理。

③在main()方法中,必须创建该类的实例对象才能通过实例对象去访问类的非静态成员。

注意:任何方法内的变量都不能声明为静态变量,即任何方法中的变量都不能使用static关键字修饰。

静态代码块:当类被加载时,静态代码块被执行,且只被执行一次。常用来进行类属性的初始化。

类加载时机:类在第一次被使用时才被装载,而不是程序启动时就装载程序中所有可能用到的类。

8、单例设计模式

所谓单例设计模式,就是保证一个类仅有一个实例,并提供一个访问它的全局访问点。

设计思路:①将类的构造方法的权限设为private;

②在类中定义一个静态的引用变量,用来接收对象;

③使用一个返回值类型为该类对象的静态方法取得创建的实力对象

例:public class Single{

private Single(){}

public static Single instance = null;

public static Single getInstance(){

if(instance == null){//只有当没有该类的实例对象时,

instance = new Single();//对象才被创建。

}

return instance;

}

}

9、使用javadoc生成注释文档

命令:javadoc -d -version -author engner.java

-d:输出文件的目标目录

-version:版本信息

-author:作者信息

engner.java:java源文件

10、对象中成员变量的初始化步骤:

①分配成员变量的存储空间,并进行默认初始化;

②绑定构造方法参数;

③若有this()调用,则调用相应的重载构造方法,被调用的重载构造方法的执行流程结束后,回到当前构造方法,当前构造方法直接跳转到第⑥步;

④显式或隐式追溯调用父类的构造方法,父类的构造方法又从第②步开始对父类执行这个流程,从父类构造方法结束后,返回当前构造方法继续执行;

⑤进行实例变量的显式初始化;

⑥执行当前构造方法体中的代码。

11、final关键字

①final可用来修饰类、属性、方法;

②final修饰的类不能被继承;

③final修饰的方法不能被子类重写;

④final修饰的变量为常量,只能赋值一次;final修饰的成员变量,必须在声明时或该类的构造方法中显式赋值,然后才能使用。

⑤方法中定义的内置类,只能访问该方法内的被final修饰的局部变量;

⑥当使用public static final共同修饰常量时,该常量为全局常量,必须在定义时赋值。

12、抽象类和接口

①含有抽象方法的类一定是抽象类,抽象类中的方法不一定全都是抽象方法;

②接口是抽象方法和常量的定义的集合;

③接口中的成员默认用public修饰,常量默认用public static final修饰,所一接口的变量均是全局的;

④多个无关的类可以实现同一个接口,一个类也可以实现多个无关的接口,接口还可以多继承。类只能单继承。

13、对象的类型转换

①子类对象可以隐式转换为父类对象;

②父类对象不能隐式转换为子类对象,需强制转换;

③instanceof,用于判断一个类是否实现了某个接口,或判断一个实例对象是否属于某个类。如“对象 instanceof 类”,返回值为boolean。

---------------------- ASP.Net+Unity开发 .Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: