标签:bool 概念 16px code 聚合 on() div object theme
1,程序和对象的概念
java是面向对象的语言,按照玄学的说法就是一切都是对象,换到java的概念就是程序可以被认为现实中的事物或者行为,即通过程序模拟事物和行为,所以机可以认为一个整体程序是一个对象,此程序又是有一个个小程序(不是微信小程序)组成的,每个小程序也可以被认为是一个个对象,只不过是大小不同维度不同的对象。
举个栗子:
假如要做一个“手机系统”的程序,那么整个手机你可以认为是一个对象,如今的手机最基本功能如:通话,发短信,网络数据传输,应用等等。这几个属性分别也可以作为独立对象。
例如通话功能也可以看做是一个对象,此对象拥有拨号,挂机等属性或者操作,那么拨号也可以作为通话的一个属性或者方法,拆的越细,功能分配越均匀。
总结:“手机系统”(对象)和如“通话”(属性)是属于"has-a"关系,即聚合关系前者拥有后者;
2,实现面向对象程序
概念总是要落地,使用java这门编程语言如何写出面向对象的代码?对象是如何生成的?
2.1 创建类
实现对象必须先实现类,那么类是什么呢?类是规划对象的行为的特征,是一种数据类型,java本身提供了多种数据类型,其中一种数据类型叫做class类,它能决定一类对象的行为和外观。如下class关键字类实现。
声明方式如下:
注意:类是类,对象是对象,类是规划对象的行为特征,但是只能是一种数据类型,类只有被new被实例化或其他实例化方式才能叫对象。对象和类具有本质区别。通过一种类型,可以创建多个对象。这些对象属于这一种类型。
字段和方法
在类型对象中可以声明字段(数据)和方法(行为),字段也可以认为是属性,就如同“手机系统”的“通话”属性,方法就是指的行为,即通话行为,就如同“手机系统”的开机关机等操作。
public class Phone {
int phoneNumber=123456789;//电话号码
//通话功能
Call call = new Call();
boolean flag = false;//表示关机状态
/**
* 打开电源
*/
public void powerOn() {
flag=true;//改变flag的状态,开机
}
/**
* 拨号
*/
public void dialing(){
//只有属于开机状态手机才能进行拨号通话功能。
if(flag==true){
call.toLi(phoneNumber);//给Li打电话
}
}
//主方法,程序运行的
public static void main(String[] args) {
System.out.println(args);
Phone p=new Phone();
p.dialing();
}
}
本实例中,创建了一个叫phone的类,它拥有phoneNumber(用于作为电话号码),Call作为通话功能。flag作为关机状态,以及powerOn()方法,和dialing通话方法。即可以通过方法可以做我们预想的效果。这里只是简单示例。。
如powerOn改变flag的值,按照面向对象的思想,flag被代表成关机状态。powerOn的方法中将flag改成了true的状态,即行为为开机状态,dialing方法则是调用Call的操作即拨打电话操作,学习java还得会YY意淫能力。。。
2.2,操纵对象
现在我们有了phone的class类,需要生成phone的对象并操纵对象实现行为,就像上面提到的类只有被实例化出来后才能叫对象。
1,首先我们需要声明main方法,JVM通过main方法会起个main线程,并分配程序运行的空间,所以运行程序时要同main方法执行。main的写法也是固定的(因为此方法就是java提供的)。
2,通过引用指向对象或者直接实现对象操纵其对象的方法(行为)。
如下:
public static void main(String[] args) {
System.out.println(args);
//new 实例化Phone类成phone对象,由Phone p变量接收new出来的对象
Phone p=new Phone();
//p调用dialing()方法
p.dialing();
/**
* Phone类实例化的对象只能被Phone类变量接收,不能被其他类型变量接收,除非是它的超类
*/
//String str=new Phone(); 编译失败,编译不通过
Object obj=new Phone();//Object可以接收Phone类实例化对象,因为Object是所有的父类
}
View Code
声明引用Phone p=new Phone();这步操作是声明一个Phone(class类型)的变量并命名为p,new Phone()生成一个类型为Phone的对象。=号在java中是赋值的意思,就是讲生成的对象赋值给p变量,由引用p来控制Phone对象。
引用和对象的关系就像遥控器和电视,通过遥控器控制电视操作,换台,开关机等操作,但遥控器本身并不是电视,所以不要把变量当做对象本身。而且变量p以后还可以再指向别的同类型(Phone的Class或者Phone的子类)的变量,当P指向别的对象时,它和原本的对象就没有关系了,无法控制原本对象了。
现实中要想遥控器要控制电视,第一步是必须先和电视连接后才能操作,要不然无法控制电视,如下程序中变量P要想控制Phone对象,必须先给变量p赋值。
如下:
public static void main(String[] args) {
Phone p=null;//p不赋值默认为null
p.dialing();
/*Exception in thread "main" java.lang.NullPointerException
at com.basics.Phone.main(Phone.java:32)*/
}
View Code
这里的p变量的值是null,即没有指定链接的对象。在不赋值的情况下,它默认就是null,所以在程序执行时报NullPointerException异常即空指针异常。这里额外说下,异常是开发时非常友好的体验,试想下通过遥控器没有绑定电视,遥控器要控制电视根本无法操作,如果没有异常根本不知道程序发生了什么情况,这么报了空指针异常就是告诉我们没有连接成功,我们自然不会去排查是不是遥控器没电了或者电视没插插座等,我们就很清晰的知道是什么原因。
在程序执行过程中发生错误,java语言设计者为了避免程序继续往下走会带来无法预料的问题,所以当程序发生异常时异常也如同return作用一样使当前程序就此停止执行。不过java设计的异常可以将错误信息提供出来以便开发者参考并解决问题。
回到操作对象话题,不用变量也能控制对象,可以通过对象直接操作其方法,如new Phone().dialing();等同于p.dialing();既然可以直接操作那为什么还有再创建引用变量呢?创建引用变量的目的是为了传递作用,A变量赋值给B变量时,B和A变量都拥有同一个对象。方便开发使用,可以让对象使用起来更加灵活。
如下:
public static void main(String[] args) {
Phone p=new Phone();
Phone p2=new Phone();
//变量p3被赋值p,p3和p拥有同一个对象,无论操纵p3还是操纵p,他们都同时改变,因为他们的值是同一个
Phone p3=p;
p.phoneNumber=10;//通过p引用修改对象的值。
System.out.println(p2.phoneNumber);//123456789
System.out.println(p.phoneNumber+":"+p3.phoneNumber);//10:10
}
3,总结
以上总结对象拥有三个特点:
1,状态:每个对象拥有内部数据,内部数据就是该对象的状态
2,行为:方法就是行为
3,标识:每个对象都有一个唯一标识,用来区分与其他对象的区别,如内存中唯一的地址。
程序:
1,程序就是对象的集合
01-java语言的基本概念
标签:bool 概念 16px code 聚合 on() div object theme
原文地址:https://www.cnblogs.com/likejiu/p/9821593.html