
所谓面向对象编程,是指通过对象的方式把现实世界的事物映射到计算机里的一种编程方法。我们在java中常常会定义一个类,例如定义一个类person。
class Person{
public String name;
public int age;
}
在这里我们class定义一个person类。里面包含了2个字段,每个字段定义了一个属性,第一行定义了姓名属性name,修饰符为public(一种访问权限),第二行定义了年龄属性整型的age。我们通过这种方式把数据封装在person里面。
一、 创建对象我们写完class只是定义了模板对象,还没有创建一个实例来执行这些命令。所以我们通过new操作符来创建对象,例如:
Person p=new Person();
上述代码创建了一个Person类型的实例,并通过变量p指向它。
我们需要注意区分Person p是定义Person类型的变量p,而new Person()是创建Person实例。
有了这个p我们就能来对实例进行操作。访问实例变量可以用变量.字段,例如:
p.name="王小明"; p.age=20;二、方法
在java中一个类通过定义方法,就可以给外部代码暴露一些操作的接口,同时,内部自己保证逻辑一致性。
调用方法的语法是实例变量.方法名(参数);。一个方法调用就是一个语句,所以不要忘了在末尾加;,方法是java中实现功能的一种重要手段。
从上面的代码可以看出,定义方法的语法是:
修饰符 方法返回类型 方法名(方法参数列表) {
若干方法语句;
return 方法返回值;
}
方法返回值通过return语句实现,如果没有返回值,返回类型设置为void,可以省略return。
接下来我们就要了解一些修饰符,修饰符分为类修饰符,方法修饰符,变量修饰符。其中方法修饰符有如下内容:
二、方法修饰符
1.访问控制修饰符
公共访问控制符public、保护访问控制符protected、缺省默认访问控制符、私有访问控制符private
2.非访问控制修饰符
抽象方法控制符abstract 、静态方法控制符static 、最终方法控制符final 、本地方法控制符native 、同步方法控制符synchronized
在这里我们需要先重点了解访问控制符:
公共访问控制符public 、保护访问控制符protected 、缺省默认访问控制符、私有访问控制符private。
①公共访问控制符 public:用 public 修饰的域称为公共域。由于 public 修饰符会降低运行的安全性和数据的封装性,所以一般应减少 public 域的使用。
②私有访问控制符 private:private 修饰的成员变量只能被该类自身所访问,不能被其它任何类 ( 包括子类 ) 访问。
③保护访问控制符 protected:用 protected 修饰的成员变量可以被三种类所引用:①该类自身;②同一个包中的其它类;③其它包中的子类。使用修饰符 protected 的主要作用是允许其它包中的子类来访问父类的特定属性。
this变量我们在方法内部,可以使用一个隐含的变量this,它始终指向当前实例。因此,通过this.field就可以访问当前实例的字段。
如果没有命名冲突,可以省略this。例如:
class Person{
private String name;
public String getName(){
return name;//可以等价于this.name;
}
但是,如果有局部变量和字段重名,那么局部变量优先级更高,就必须加上this:
class Person {
private String name;
public void setName(String name) {
this.name = name; // 前面的this不可少,少了就变成局部变量name了
}
}
三、 方法参数
方法可以包含0个或任意个参数。方法参数用于接收传递给方法的变量值。调用方法时,必须严格按照参数的定义一一传递,也就是参数的类型,个数,顺序要完全相同。
四、构造方法我们通常在创建实例时,是通过构造方法来初始化对象的,接下来我们通过一个例子对照着理解。
public class Main {
public static void main(String[] args) {
Person p = new Person("Harry", 20);
System.out.println(p.getName());
System.out.println(p.getAge());
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
}
构造方法是如此特殊,所以构造方法的名称就是类名。构造方法的参数没有限制,在方法内部,也可以编写任意语句。但是,和普通方法相比,构造方法没有返回值(也没有void),调用构造方法,必须用new操作符。
我们需要注意的是任何class都有构造方法。
那前面我们并没有为Person类编写构造方法,为什么可以调用new Person()?
原因是如果一个类没有定义构造方法,编译器会自动为我们生成一个默认构造方法,它没有参数,也没有执行语句,类似这样:
class Person {
public Person() {
}
}
还要特别注意的是:
①如果我们自定义了一个构造方法,那么,编译器就不再自动创建默认构造方法。
②没有在构造方法中初始化字段时,引用类型的字段默认是null,数值类型的字段用默认值,int类型默认值是0,布尔类型默认值是false。
在一个类中,我们可以定义多个方法。如果有一系列方法,它们的功能都是类似的,只有参数有所不同,那么,可以把这一组方法名做成同名方法。例如,在Hello类中,定义多个hello()方法:
class Hello {
public void hello() {
System.out.println("Hello, world!");
}
public void hello(String name) {
System.out.println("Hello, " + name + "!");
}
public void hello(String name, int age) {
if (age < 18) {
System.out.println("Hi, " + name + "!");
} else {
System.out.println("Hello, " + name + "!");
}
}
}
★注意:方法重载的返回值类型通常都是相同的。