关于面向对象,主要说一下几点:
1、类和对象
2、方法:方法的传值;方法的返回值以及方法的调用
3、封装
4、实例变量和局部变量(不单独讲解,分别在类和方法部分讲解)
5、空指针异常
6、对象数组
-----------------------------------------------------------------------
1、类和对象
类是对象的抽象描述;对象是类的具体表现。
类,就可以理解为是一个种类。比如:狗,桌子,飞机都属于类;一个类是把它拥有的对象的特征描述出来。
对象,就是某一个类中的一个具体的实物,比如:tom家的那只狗,就是狗这个类中的一个对象;河南理工大学1101教室的讲桌就是桌子这个类中的一个对象。
一个对象只属于一个类,而一个类可以有多个对象。
类的组成:
1)属性(实例变量):指对象具有的特征(一般为名词)。
2)方法:该类的对象应该具备的动作行为(一般为动词)。
注:1)类中只能包含实例变量和方法,只有在方法中才能放相关的执行某种功能的代码,这也是java的面向对象的原因,如果之前学的是面向过程的语言,在这里要注意思维的转变。
2)类中声明的变量是实例变量,实例变量在不赋值的情况下是有默认值的。
String 类型的默认值为null;
int类型的默认值为0;
float类型的默认值为0.0f;
boolean类型的默认值为false;
以下是一个例子,定义了一个名字为Dog的类:
public class Dog{
//三个实例变量,狗的名字、年龄和毛色
String name;
int age;
String color;
//两个方法,狗可以跑,可以叫的方法
public void run(){
//代码
}
public void bark(){
//代码
}
}
以下是一个测试类,里面定义了一个对象,用于测试上面的Dog类:
public class Tset{
public static void main(String[] args){
Dog myDog = new Dog();//创建Dog类的对象(内存的分配,变量名myDog在栈内存中,它指向堆内存的一块空间,用于存储myDog的信息)
//调用类中的实例变量
myDog.name ="旺财";
myDog.age = 2;
myDog.color ="白色";
//调用类中的方法
myDog.run();
myDog.brak();
}
}
注:1)以上定义了两个类,一个Dog类,一个用于测试的Test类,一般情况下,只有测试的类中才有main方法,而被测试的类中是没有main方法的。
2)对象是通过“.”使用类定义的属性和方法的,eg:myDog.run();在main方法中当代码执行到这一句时,就会转到Dog类中去执行这个run()方法,执行完再返回main方法,接着执行myDog.run()以下的语句。
2、方法
创建方法的一个宗旨:把功能相同的代码封装在一个方法中;
格式:访问修饰符 返回值 方法名(参数列表)
方法的传值:
如果定义类的方法有参数列表在调用这个方法的时候,也要传入相同类型的参数(注意参数的数量、类型和顺序,与参数的名字没有内在的联系)。eg:
public class Pc {
/**
* 给出歌曲的名字,完成听歌功能
*/
public void play(String msg){
System.out.println("歌曲 "+msg+"正在播放");
}
public void chat(String name, String content){
System.out.println(name+"正在说"+content);
}
}
public class Test {
public static void main(String[] args) {
Pc p = new Pc();
p.chat("lily", "hello");
p.play("奥斯汀的诡计");
}
}
注:1)在内部调用中,各方法的定义没有先后顺序。
2) 在方法内部也可以定义变量,这里的变量叫做局部变量,局部变量没有默认值,在没有被赋值的时候使用,会引发异常出现。
3、封装(JavaBean)
面向对象的三个特征:封装、继承和多态;
封装的原因:1)有些数据是很关键很机密的,不想随便被使用,被改变,被访问;2)内部的方法或者变量对于外部使用者没有作用。
封装的基本原则: 1)将实例变量标记为私有的(private); 2)提供公有的(public)的setter和getter方法用来控制实例变量的存取操作。eg:
public class FengZhuang {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age < 18){
this.age = 18;
}else{
this.age = age;
}
}
}
public class Test {
public static void main(String[] args) {
FengZhuang f = new FengZhuang();
f.setName("lily");
f.setAge(12);
System.out.println(f.getName());
System.out.println(f.getAge());
}
}
在以上的程序中,规定输入的年龄应不小于18岁,为防止外部使用时,恶意修改,故采用这种封装的方法,对于小于18的,强行设置为18;
4)空指针异常
当定义了一个类的对象,而此对象的值为null时,这个对象调用该类的属性或者方法时,就会出现这一种异常,该异常如图:
对于这种异常的处理方法就是创建一个对象时,不能让其为null。
6)对象数组
在本文章第一部分讲类与对象时,我们定义了Dog类,再此依然借用那个类,假如我们已经有了那个Dog类,则可以定义这样一个数组:
Dog[] dogs = new Dog[5];
dogs[0] = new Dog();
dogs[0].run();
这里定义了一个数据类型为Dog的数组,可以最多可以存储5个Dog类型的对象。我们可以把它对比与String类型的数组理解,在此,Dog就是一种引用数据类型,数组中存储的元素都是Dog这种数据类型的数据。