博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java语言学习(五):面向对象入门
阅读量:6161 次
发布时间:2019-06-21

本文共 3702 字,大约阅读时间需要 12 分钟。

hot3.png

    接下来的博客,我将着重说下面向对象的编程思想,这个是Java编程开发的重点内容,对以后的开发有着深远的影响,必须重视起来。在使用Java语言开发时,时刻要以面向对象的思想考虑问题,面向对象的基础就是类。

    首先,说下类的定义,下面是类的一般定义模式:

    (1)任务:定义类

    (2)准备工作:类中存在的元素有成员变量和方法

    (3)编程:

    定义类,提供成员变量和方法:

public class Book {	private String bookName;//定义书名	private String author;//定义作者	private double price;//定义价格	//构造方法初始化	public Book(String bookName,String author,double price){		this.bookName = bookName;		this.author = author;		this.price = price;	}	public String getBookName(){		return bookName;	}	public String getAuthor(){		return author;	}	public double getPrice(){		return price;	}}

    测试类,创建对象:

public class TestBook {	public static void main(String[] args) {		// TODO Auto-generated method stub		//创建对象		Book book = new Book("Java语言学习","Yoki",66.66);		//通过对象调用类的方法		System.out.println("书名:"+book.getBookName());		System.out.println("作者:"+book.getAuthor());		System.out.println("价格:"+book.getPrice());	}}

    (4)运行:输出实例化类对象的信息

    注意:在Java中,使用class关键字来定义类。一个类通常包括域和方法两部分,域表示对象的状态,方法表示对象的行为。使用new关键字创建类的对象。一般来说,变量在使用前需要对其进行初始化,Java中虚拟机会自动为其初始化,像基本数据类型,比如 byte、int、long、float、char等,而像引用类型的变量,如String类型,在使用前需要进行初始化,否则会抛出null异常。除了成员变量,还有局部变量,使用前也需初始化。

    上面是一般的类的定义,还有种方式:单例模式

    (1)任务:单例模式

    (2)准备工作:单例模式的特点在于仅能获得一个对象,需将构造方法私有化,并提供一个静态方法返回类的对象

    (3)编程:

/* * 单例模式 */public class Emperor {	//声明一个类的引用	private static Emperor emperor = null;	//将构造方法私有	private Emperor(){}	//实例化引用	public static Emperor getInstance(){		if(emperor == null)			emperor = new Emperor();		return emperor;	}	public void getName(){		System.out.println("单例模式!!!");	}}

    测试类:

public class TestEmperor {	public static void main(String[] args){		Emperor e1 = Emperor.getInstance();		e1.getName();		Emperor e2 = Emperor.getInstance();		e2.getName();	}	}

    (4)运行:输出信息

    接着,我们再通过汉诺塔的案例来进一步熟悉下:

    (1)任务:汉诺塔

    (2)准备工作:汉诺塔的思想:将N个盘子从A移到C,需要先将第N个盘子上面的N-1个盘子移到B上,这样才能将第N个盘子移到C上,同理,为了将第N-1个盘子从B移到C上,需要将N-2个盘子移到A上,这样才能将第N-1个盘子移到C上。通过递归实现汉诺塔的求解。

    (3)编程:

import java.util.Scanner;public class HanoiTower {	public static void moveDish(int level,char from,char inter,char to){		if(level == 1)			System.out.println("从"+from+"移动盘子1到"+to);		else{			moveDish(level-1,from,to,inter);			System.out.println("从"+from+"移动盘子"+level+"到"+to);			moveDish(level-1,inter,from,to);		}	}	public static void main(String[] args){		System.out.println("请输入汉诺塔的阶数:");		Scanner scan = new Scanner(System.in);		try{			int nDisks = scan.nextInt();					moveDish(nDisks,'A','B','C');		}catch(Exception e){			System.out.println("输入不合法!");		}	}}

    (4)运行:在控制台输入阶数,输出移动的操作步骤

    在方法的构造中,重载是对方法名过多的一种处理,当对象在调用方法时,可以根据方法参数的不同确定执行那个方法。方法参数的不同包括参数类型不同、参数个数不同、参数顺序不同,即这些不同能构造出相同名称的方法。构造方法是一种特殊类型的方法,声明时,遵守一些规定:

    构造方法的名称与类名相同;

    构造方法无返回值;

    构造方法总是与new操作符一起使用;

    此外,在构造方法中,可使用this来调用其他构造方法,使用super调用超类构造方法

    对于类中的成员变量,大多通过公有public或者私有private的方式修饰。加入static修饰成员变量,则该变量时所用对象共享的,任何一个对象的修改会影响其他对象。如下

public class Book{    //定义一个计数器    private static int counter = 0;    public Book(String bookName){        System.out.println("书名:"+bookName);        counter++;    }    public static int getCounter(){        return counter;    }}

    在测试类中,利用书名数组创建对象:

public static void main(String[] args){    String[] bookNames = {"Java语言学习","PHP语言学习","C语言学习"};    for(int i=0;i

    运行程序打印出计数器为3,说明创建3次对象,计数器变量共享,才能叠加而不是重新从初始值0开始。

    Java中的类都是Object类的直接或间接子类。如在Object类中定义了equals()方法,toString()方法等,我们也可以重写(加上@Override注解)该方法,使其符合我们的使用要求,如下:

public class Book{    private String bookName;    private String author;       @Override    public String toString(){        return "书名:"+bookName+",作者:"+author;   }}

    Java将内存空间分为两块,即堆和栈,在栈中保存基本类型和引用变量,在堆中保存对象。对于基本类型可以使用 “=” 来进行克隆,此时两个变量没有关联关系;对于引用变量使用 “=” 进行克隆,将修改引用,此时两个引用变量将指向同一个对象,则一个变量对其进行修改会改变另一个变量。克隆又分为浅克隆和深克隆,这里不做介绍了。

    最后还有个序列化的问题,进行序列化的类需要实现Serializable接口,该接口无任何方法,仅是个标识接口。具体的使用有机会再说了。

转载于:https://my.oschina.net/u/3747963/blog/1845394

你可能感兴趣的文章
Method Swizzling 处理一类简单的崩溃
查看>>
AngularJS学习!
查看>>
在Eclipse中搭建Python Django
查看>>
struts国际化
查看>>
Laravel 5.0 - Middleware (中间件)
查看>>
文件特殊权限及facl
查看>>
我的友情链接
查看>>
Android按两次返回键退出应用
查看>>
第一章:认识Redhat Linux
查看>>
文本查看指令
查看>>
我的友情链接
查看>>
android开源项目框架大全:《IT蓝豹》
查看>>
boost库
查看>>
LeetCode——Longest Consecutive Sequence
查看>>
Python对字典(directory)按key和value排序
查看>>
Azure: 给 ubuntu 虚机挂载数据盘
查看>>
BugkuCTF web3
查看>>
僵尸进程、孤儿进程
查看>>
413 Request Entity Too Large
查看>>
VCL组件之重要的公用属性
查看>>