日期:2014-05-20 浏览次数:20841 次
ps:因为面向对象的内容比较重要,而且很多要通过代码理解的;
如果全部写在一篇文章中会显得篇幅过长,过于累赘;读者读得累;
我也写得累!
在上一节中我们对Java的基础知识进行了学习;
在这一节中我们将会进一步了解Java的核心
面向对象部分!这一节很重要,也是后面几节的基础,
希望大家可以认真学习下!
EveryThing is Object!
所有事物都具有两个方面:有什么?能干什么
对应的,我们可以理解为
属性:描述对象;
方法:对象有什么功能
高内聚,低耦合,从而提高对象的可复用性
以对象为中心,先开发类,得到对象,再通过对象间的相互通信实现功能
new关键字 + 指定类名创建
eg:Person p = new Person();
现在堆内存中创建一个对象----->然后在栈内存中创建一个变量引用对象的地址
对象名作为操作的标识符,仅仅只是对象的一个引用而已,而并非对象本身;
有引用,但不表示一定要有一个对象与引用相连;
所以在创建一个引用时,都需要进行初始化
通过点语法访问.eg:p.age = 18;
从new创建开始,到没有任何引用到达对象时结束(成为垃圾)
不定义变量引用对象,用new创建后直接调用,没名字,所以叫做匿名对象
通常我们需要使用一对象,且只用一次的话,就用匿名对象(没有引用,使用一次后就变成垃圾了)
可以作为实参进行传递
类的一般形式:
class 类名
{
成员变量
构造方法
成员方法
}
成员变量:定义在类中,在整个类中都可以访问,存在于栈内存的对象中,随着对象的消失而消失,有默认初始值
局部变量:定义在方法,语句,局部代码块中,只在所属区域有效;存在栈内存的方法中,随所属区域的执行而执行;结束而
释放,没有默认初始值
当对象创建时,会对成员变量自动赋初值,基本数据位0,引用型为null;
注:char为"\u0000"表空 boolean:false
为对象进行初始化的一个特殊方法,在生成对象时会被调用来初始化对象
构造方法名需与类名相同,new对象时隐式地进行调用,用户无法显式调用;
无返回值,不能加void返回值类型,总会有的,就算你不写构造方法;
也会自动生成默认缺省的构造方法;当然如果我们写了,就不会再生成了
又叫编译时的多态,需要参数类型
方法名相同,参数不同(个数,类型)
1)用于区分局部变量与实例变量
2)显式地调用重载的构造方法,貌似用的不怎么多,就是构造方法的相互调用
调用语句需要写在第一行哦!
eg:
/* * 该程序演示的是构造方法的重载和this关键字的作用 * */ public class Test { private int i; private String str; //这个构造方法是完成变量初始化的方法,this在这里区分局部变量与成员变量哦! public Test(int i,String str) { this.i = i; this.str = str; } //通过this调用上面的构造方法,要放在第一行 public Test(String str) { this(1,"woqu"); } //通过this调用上面的构造方法,要放在第一行 public Test() { this("HeHe"); } }
一个好的方法应该有好的移植性和可重用性
两种传参方式:
①按值传递:内存的空间变量 eg:int i
②按引用传递(传对象引用):Integer类的一个对象引用: Integer i = new Integer(10);
一个Java文件,只允许有一个修饰为public的类或者接口,且名字要与文件名相同,不然编译器会报错
打包:package eg: package com.jay.example;
导包:import eg:inport java.io.*;
注意:导包时用星号只表示该层次的所有类,但是不包含子层次下的类!!!!
默认(default):同包可见 public共有:所有类可访问
private私有:同一类可见 protected保护:子类或同包可见
ps:要注意private和protected都不能够修饰类啊!!!!
数据成员占据不同的内存区域;所有方法成员共享一段程序代码
步骤:
定义一个Person类,然后再建立一个测试类PersonTest,对相关方法进行调用
代码如下:
Person.java
//将该类打包到一个文件夹中 package com.jay.example; public class Person { /* * 定义成员变量,和成员变量不同,当我们new对象时 * 系统会给他们生成默认的初始值,这里之所以将所有变量都 * 设置成private私有,是为了实现封装,外界如果想访问 * 修改属性的话,需要通过该类提供的get,set方法进行访问 */ private String name; private int age; /* * 这里我们定义的是构造方法,构造方法是用来进行变量初始化的 * 因为我们自定义了一个有参的构造方法,那么系统就不会再自动生成 * 无参的缺省构造方法了,但是一个好的编程习惯还是把这个却省的构 * 造方法写上,this在这里起的作用就是区分局部变量与成员变量 * */ public Person(String name,int age) { this.name = name; this.age = age; } public Person(){} /* * 接着到成员方法的定义了; * 我们先定义set和get的方法; * 可以理解为通过这个方法为外界提供一个接口 * 别的类可以通过这个接口访问相关属性的值 * */ public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //定义打印信息的方法 public void printMsg() { System.out.printf("姓名: "+name+"\n年龄: "+age); } }
PersonTest.java
package com.jay.example; public class PersonTest { public static void main(String[] args) { String pname = null; int page = 0; //将Person类实例化为对象 Person p = new Person("小猪",20); p.printMsg(); //通过get方法获得参数,自己输出 pname = p.getName(); page = p.getAge(); System.out.println("\n姓名: "+pname+"\n年龄: "+page); //通过set方法设置参数,调用printMsg打印信息 p.setName("大猪"); p.setAge(25); p.printMsg(); } }
执行效果图:
在这一小节里面,我们对类与对象进行了初步的解析;
对类与对象的定义,构造方法,作用域等进行了学习
通过案例可以进一步加深大家对类与对象的了解
好了,这一节就到这里了,如果有什么疑问,错误,纰漏,或者
好的建议,望读者指出,不甚感激!(*^__^*) 嘻嘻……