这部分对java面向对象的概念进行一个大致的说明。
一、对象
相信大家肯定知道,java是一种面向对象的编程语言,而C是一种面向过程的编程语言,那么,什么是面向对象的思想呢?
对象可以是一个个体,可以是一个类别。世间万物皆对象。
还是很模糊?再直白点,你这个个体,就是一个对象。一个地球,也是一个对象。一台电脑,也是一个对象。
举个例子,开灯,如果用c这种面向过程的语句要怎么去思考,那就是:开关闭合,电路通了,灯泡通电,电使得灯丝发光。这是一个过程,那么用java怎么去理解呢,在这里,灯是一个对象,发光发亮是灯泡的一个功能,一个性质,所以,我们只要分析灯就行了,灯打开开关,灯发光。是不是对于c来说,简单了很多呢。
如果大家还不理解,就先记住,等学下去会加深理解的
这里要说一个领域对象的概念:
javabean
JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。
public class Bean{
private String name;
private int age;
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public Bean(){
}//我是无参构造器
}
上述就是一个javabean,提供了set和get方法以及无参数的构造器,即最后一个方法。
对于简单的JavaBean也有几个名词:
1. VO:与简单Java对象对应,专门用于传递值的操作上
2. POJO:简单Java对象
3. TO:传输对象,进行远程传输时,对象所在的类必须实现java.io.Serializable
接口。
这里大家可以了解一下。
二、包,类以及方法
在eclipse中(其他开发工具也一样),java代码的管理都是以工程–>包–>类–>方法,这样子的存储方式的:
其实本质就是文件夹,这个同学们可以自己去实验,到workspace看一下就知道了。这里不细说。
那么包,类,方法和对象有什么关系呢?
对象是在类的基础上建立的。类可以简单的理解为模板,而对象即在这个模板上制作出来的产品。类是一类物体的共同特性的抽象。对象是类的一个实例。或许现在大家不理解,但是可以记住这句话,在以后的开发实践中会慢慢理解的。
(一)、包
包的命名一般是域名的反转,为了便于管理代码。比如假设是百度在写代码,那么就是com.baidu.名称
(二)、类
说到类,这里就提一下修饰符,看上面图片中
public class Demo{}
修饰符 类 类名
java的访问控制修饰符有public ,private,protect,default
他们的作用范围是:
访问权限 | 类 | 包 | 子类 | 其他包 |
---|---|---|---|---|
public | ∨ | ∨ | ∨ | ∨ |
protect | ∨ | ∨ | ∨ | × |
default | ∨ | ∨ | × | × |
private | ∨ | × | × | × |
类中能出现的内容:全局变量,方法,代码块,内部类
那么怎么可以建立对象呢,主要有一下方法:
- 使用new关键字:这是我们最常见的也是最简单的创建对象的方式,通过这种方式我们还可以调用任意的够赞函数(无参的和有参的)。比如:
Demo demo= new Demo();
- 使用Class类的newInstance方法:我们也可以使用Class类的newInstance方法创建对象,这个newInstance方法调用无参的构造器创建对象,如:
Demo demo2= (Demo)Class.forName("根路径.Demo").newInstance();
或者:Demo de= Demo.class.newInstance();
- 使用Constructor类的newInstance方法:次方法和Class类的newInstance方法很像,java.lang.relect.Constructor类里也有一个newInstance方法可以创建对象。我们可以通过这个newInstance方法调用有参数的和私有的构造函数。如:
Constructor<Demo> constructor = Demo.class.getInstance(); Demo de= constructor.newInstance();
这两种newInstance的方法就是大家所说的反射,事实上Class的newInstance方法内部调用Constructor的newInstance方法。这也是众多框架Spring、Hibernate、Struts等使用后者的原因。- 使用Clone的方法:无论何时我们调用一个对象的clone方法,JVM就会创建一个新的对象,将前面的对象的内容全部拷贝进去,用clone方法创建对象并不会调用任何构造函数。要使用clone方法,我们必须先实现Cloneable接口并实现其定义的clone方法。如:
Demo demo2= <Demo>demo.clone()
;这也是原型模式的应用。- 使用反序列化:当我们序列化和反序列化一个对象,JVM会给我们创建一个单独的对象,在反序列化时,JVM创建对象并不会调用任何构造函数。为了反序列化一个对象,我们需要让我们的类实现Serializable接口。如:
ObjectInputStream in = new ObjectInputStream (new FileInputStream("data.obj")); Demo demo3= (Demo)in.readObject();
(三)、方法
学过C语言的可以进行最直观的理解,方法就是函数,是在类中定义了具体特定功能的一段程序。一般表形式为:
修饰符 返回时 方法名(参数类型 1 参数名1,参数类型2 参数名2……){
执行语句;
return 返回值;
}
代码:
public static void main(String[] args) {
System.out.println("我是mian方法");
}
public int method(int i) {
return i;
}
上面是两个方法,第一个是特殊的main方法,它是所有程序的入口。第二个是在类中的方法。
方法中有两个概念:重写,重载
1、方法的重载
方法名相同,形式参数不同这种行为叫做方法的重载 。
public int method(int i) {
return i;
}
public int method(int i, double j) {
return i;
}
public int method(double j, int i) {
return i;
}
如上面的代码,在一个类中,相同的方法在一定的条件下可以共存。只要里面的形式参数个数,类型以及位置不同就行。第二个和第三个也是不会报错的,因为位置不通。
2、方法的重写
这里先不做阐述,等到了继承的时候再讲。