java面向对象—封装详解

java面向对象—封装详解
java面向对象—封装详解

Java面向对象

面向对象

在Java中,高手们的概念就是万物皆对象。

面向对象的概念:

面向对象:是基于面向过程的一种思想。

面向过程:强调的是功能行为。

面向对象:将功能封装进对象,强调具备了功能的对象。面向对象是基于面向过程的。

面向对象和面向过程:

图例:

面向对象特点:

1,面向对象就是一种常见的思想。符合人们的思考习惯。

2,面向对象的出现,将复杂的问题简单化。

3,面向对象的出现,让曾经在过程中的执行者,变成了对象中的指挥者。面试题:你怎么理解面向对象的?

1,它符合现在人们思考的一种习惯

2,它让我们复杂的事情简单化

3,让我们从曾经的执行都变为现在的指挥者

其实面试官你本身就在用面向对象的方式思考问题

因为以面试官您的能力而言,来了一个软件项目的话,您从需求分析到设计到开发到测试,都能完成,但是这样特别耗时间,所以您为了提高效率,您就需要

去找一些具备专业编程经验的人来完成这些项目,我正好就是那个具备专业编程经验的对象,您只要指挥我这个对象做事情就可以了,我会给您一个非常满意的

结果,至于过程您不用管。所以面试官您就在用面向对象的方式思考问题,来提高公司的效率,而我就是具备专业编程经验的人。

面向对象有三个特征:封装,继承,多态

以后的开发过程:其实就是找对象用。没有对象,就创建一个对象。

找对象,建立对象,使用对象,并维护对象的关系。

类和对象的关系:

类:就是对现实生活中事物的描述。

对象:就是这类事物,实实在在存在的个体。

想要描述:提取对象中共性内容。对具体的抽象。

映射到Java中描述就是class定义的类。

具体对象就是对应Java在堆内存中用new建立实体。

例子:

需求:描述小汽车。描述事物其实就是在描述事情的属性和行为。

分析:

1,属性:轮胎数。颜色。

2,行为:运行。

定义类其实就是在定义类中的成员。

成员:成员变量<-->属性,成员函数<-->行为。

属性对应是类中变量,行为对应的类中函数或方法。

其实定义类,就是在描述事物,就是在定义属性和方法,属性和行为共同成为类中的成员(成员变量和成员方法)。

类中不必有主函数,不必保证独立运行,只有保证有一个主函数入口调用类就行。

//描述汽车类

class Car{

//描述汽车的颜色

String color ="red";

//描述汽车的轮胎数

int num=4;

//描述车的运行

void run(){

System.out.println("color="+color+"..."+"num="+num);

}

}

class CarTest{

public static void main(String[] args){

//生成汽车,在Java中通过new操作符来完成

//其实就是在堆内存产生一个实体

Car c = new Car();//为什么要加括号呢?

//c就是一个类类型变量记住:类类型变量指向对象

//需求:将已有车的颜色改成蓝色,指挥该对象做使用,在Java中指挥方式是:对象.对象成员

c.color = "bule";

c.run();//color=bule...num=4

new Car().color="green";//匿名对象,不过调用匿名对象的属性没有意义。

new Car().run();//匿名对象调用方法,只调用一次。打印的结果是color=red...num=4 method(new Car());//可以将匿名对象作为实际参数进行传递

}

//需求:汽车修配厂,对汽车进行改装,将来的车都改成黑色,三个轮胎。

public static void method(Car c){

//将汽车的颜色喷漆成黑色

c.color="black";

//将汽车的轮胎改成3个

c.num = 3;

c.run():

}

}

匿名对象,没有名字的对象。

new Car();//匿名对象。其实就是对象的简写格式。

1,当对象对方法仅进行一次调用的时候,就可以简化成匿名对象。

2,匿名对象可以作为实际参数进行传递。

注意:调用匿名对象的属性是没有意义。

成员变量和局部变量的区别:

1,

成员变量定义在类中,作用于整个类中。

局部变量定义在函数,语句,局部代码块中,只在所属的大括号区域有效。

2,

成员变量存在于堆内存的对象中。

局部变量存在于栈内存的方法中。

3,

成员变量随着对象的创建而存在,随着对象的消失而消失。

局部变量随着所属区域的执行而存在,随着所属区域的结束而释放。4,

成员变量都有默认初始化值。

局部变量没有默认初始化值。

面向对象——封装(Encapsulation)

封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。封装好处:

1.将变化隔离;

2.便于使用。

3.提高重用性。

4.提高安全性。

封装原则:

将不需要对外提供的内容都隐藏起来。

把属性都隐藏,提供公共方法对其访问。

private:关键字

A:用于修饰成员变量和成员方法。

B:被修饰的内容在其他类中是不可以被访问的。

注意:私有仅仅是封装的一种体现而已。

/*

Person类。对Person的年龄进行私有化,让外界不能直接访问,对外提供公共的访问方式。

*/

class Person{

//成员变量不赋值也可以进行运行,默认初始化值是null

String name;

//私有化年龄

private int age;

//对外提供公共设置的访问方式

public void setAge(int a){

//加入判断,使程序更为符合逻辑

if(a>=0 && a<=120)

age=a;

else

System.out.println("年龄非法");

}

//对外提供公共的获取方法

public int getAge(){

return age;

}

//人可以说出自己的名字和年龄

public void speak(){

System.out.println("name="+name+"...age="+age);

}

}

//Person测试类

class PersonTest{

public static void main(String[] args){

Person p = new Person();

//对p对象的name属性进行赋值。

//p.age=-20//age被直接访问有安全隐患,有非法数据,加关键字private,age默认值是0 //p.setAge(-20);失败,因为不符合Person类中年龄的设置规则。

https://www.360docs.net/doc/0511729104.html,="Xcc";

//对p对象的age进行设置。

p.setAge(20);

//调用p对象的speak方法,打印自己的姓名和年龄。

p.speak();

}

}

构造函数:

构造函数特点:

1.函数名与类名相同

2.不用定义返回值类型

3.没有具体的返回值。

构造函数:构建创造对象时调用的函数。

构造函数作用:给对象进行初始化。

创建对象都必须要通过构造函数初始化。

一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数。

如果在类中定义了指定的构造函数,那么类中的默认构造函数就没有了。

注意:

1.默认构造函数的特点。

2.多个构造函数是以重载的形式在在的。

一般函数和构造函数什么区别呢?

构造函数:对象创建时,就会调用与之对应的构造函数,给对象进行默认初始化。

一般函数:对象创建后,需要函数功能时才调用。(函数只有被调用才执行)

构造函数:对象创建时,只调用一次。

一般函数:对象创建后,可以被调用多次。

什么时候定义构造函数呢?

在描述事物时,该事物已存在就具备一些内容,这些内容都定义在构造函数中。

构造函数可以有多个,用于对不同的对象进行针对性的初始化。

多个构造函数在类中是以重载的形式来体现的。

构造函数的小细节:

当一个类中没有定义构造函数时,系统会默认给该类加入一个空参数的构造函数Person(){}

当在类中自定义了构造函数后,默认的构造函数就没有了

class Person{

String name;

int age;

Person(){}

Person(String name,int age){

/*这里先穿越时空一下,等下会说到this关键字*/ https://www.360docs.net/doc/0511729104.html,=name;

this.age=age;

}

public void speak(){

System.out.println("name="+name+"...age="+age); }

}

class Person{

public static void main(String[] args){

Person p2 = new Person("小强",10);

p.speak();

}

public static void show(){

System.out.println("cry");

}

}

构造函数内存图解:

this:关键字

特点:this代表其所在函数所属对象的引用。

换言之:this代本类对象的引用。

什么时候使用this关键字呢?

当在函数内需要用到调用该函数的对象时,就用this。

当成员变量和局部变量重名,可以用关键字this来区分。

this:代表对象。代表哪个对象呢?当前对象。

this:就是所在函数所属对象的引用。

简单说:哪个对象调用了this所在的函数,this就代表哪个对象。

this的原理图解:

注意:this也可以用于在构造函数中调用其他构造函数。

注意:this只能定义在构造函数的第一行。因为初始化动作要先执行。

注意:构造函数间调用只能用this。

/*

需求:给人定义一个用于比较年龄是否相同的功能,也就是是否是同龄人

*/

super关键字

如果要在函数内访问类中的同名成员变量,用super进行区分。

注意:每个类身上都是一个隐式的super();那么这个空参数的super构造函数是哪个呢?查阅API发现是Object,他是所有类的父类。

构造代码块

构造函数块作用:给所有对象进行初始化。

对象一建立就运行,而且优先于构造函数执行和构造函数的区别:

构造代码块是给所有对象进行统一初始化。

而构造函数是给对应的对象进行初始化。

构造代码块中定义的是不同对象共性的初始化内容。

总结:构造代码块和构造函数共性的地方就是当对象创建时,就给对象进行初始化一次。

class Person{

{

System.out.println("欢迎,我是构造代码块!");

}

//考虑到每个对象都是需要一个国籍,所以把国籍定义为共享对象。(等下会学到哦) private static String contry = "cn";

private int age;

Person(int age){

this.age=age;

}

private boolean compare(Person p){

return this.age==p.age;

}

public void speak(Person p){

boolean b = compare(p)

System.out.println("年龄:"+b+"...国籍:"+contry);

}

}

class CompareAge{

public static void main(String[] args){

Person p1 = new Person(20);

Person p2 = new Person(21);

p1.speak(p2);

}

}

static关键字

用于修饰成员(成员变量和成员函数)

被修饰后的成员具备以下特点:

1.随着类的加载而加载

2.优先于对象存在

3.被所有对象所共享

4.可以直接被类名调用

static特点:

1,static是一个修饰符,用于修饰成员。(成员函数,成员变量)

2,static修饰的成员被所有的对象所共享。

3,static优先于对象存在,因为static的成员随着类的加载就已经存在了。

4,static修饰的成员多了一种调用方式,可以直接被类名调用。类名.静态成员。5,static修饰的数据是共享数据,对象中存储的是特有数据。

成员变量和静态变量的区别?

1,两个变量的生命周期不同。

成员变量随着对象的创建而存在,随着对象的被回收而释放。

静态变量随着类的加载而存在,随着类的消失而消失。

2,调用方式不同。

成员变量只能被对象调用。

静态变量可以被对象调用,还可以被类名.调用。

3,别名不同。

成员变量也称为实例变量。

静态变量称为类变量。

4,数据存储位置不同。

成员变量存储在堆内存的对象中,所以也叫对象的特有数据。

静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

什么时候该用static呢?

如果某个内容是所有对象共享的,就用静态修饰。

什么时候使用静态成员和函数呢?

要从两方面下手:因为静态修饰的内容有成员变量和函数

什么时候定义静态变量(类变量)呢?

当对象中出现可共享的数据时,该数据被静态修饰。

对象中的特有数据要定义成非静态存在于堆内存中。

什么时候定义静态函数呢?

当功能内部没有访问到非静态数据,或者对象的特有数据,

那么该功能可以定义成静态的

使用注意

1.静态方法可能访问静态成员类名.静态成员。

2.静态方法中不可以写this,super关键字,因为静态先于对象操作

静态有利有弊

利处:

对对象共享的数据进行单独空间的存储,没有必要每个对象都存一份

可以被直接被类名.调用

弊端:生命周期过长,访问出现局限性(静态虽好,只能访问静态)

3.主函数是静态的

public static void main(String[] args)

主函数特殊之处:

1,格式是固定的。(除了args这个数组名字可以变,其他不行)

2,被Jvm所识别和调用。

public:因为权限必须是最大的。

static:不需要对象的,直接用主函数所属类名调用即可。

void:主函数没有具体的返回值。(因为返一个值给虚拟机,虚拟机也害怕啊!是不是虚拟机没有内存存放)

main:函数名,不是关键字,只是一个Jvm识别的固定的名字。

String[] args:这是主函数的参数列表,是一个数组类型的参数,而且元素都是字符串类型。

public static void main(String[] args){

System.out.println(args);//打印[https://www.360docs.net/doc/0511729104.html,ng.String;@2536716a,当然大家的内存地址值都是不一样的。

}

什么时候定义静态函数?

当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。(说了也不清楚,下面来一个静态的应用)

静态的应用

/**

*类描述

*@author 作者名

*@version 版本号

*/

/**

*方法描述

*@param 参数描述

*@return 返回值描述

*/

/**

这是一个可以对数组进行操作的工具类,该类中提供了,获取最值,排序等功能。

@author 黑马程序员——Xcc

@version V1.1

*/

//类名必须被public修饰,才会生成帮助文档。被private修饰的不会被暴露。

public class ArrayTool{

/*

一个类中默认会有一个空参数的构造函数,

这个默认的构造函数的权限和所属类一致。

如果类被public修饰,那么默认的构造函数也带public修饰符。

如果类没有被public修饰,那么默认的构造函数,也没有public修饰。

默认构造构造函数的权限是随着的类的变化而变化的。

当然我们也可以自己设置指定构造函数的权限。

*/

/*

为什么构造函数是私有的呢?

因为本类没有涉及到特有数据。类中的方法都是静态的,都可以用类名.的方式访问。为了严谨,把构造函数私有化,不让该类创建对象。

*/

/**

空参数私有构造函数

*/

private ArrayTool(){}

/**

获取一个整形数组中的最大值。

@param arr 接收一个int类型的数组。

@return 会返回一个该数组中最大值。

*/

public static int getMax(int[] arr){

int max = 0;

for(int x=1; x

if(arr[x]>arr[max])

max = x;

}

return arr[max];

}

/**

获取一个整形数组中的最小值。

@param arr 接收一个int类型的数组。@return 会返回一个该数组中最小值。*/

public static int getMin(int[] arr){

int min = 0;

for(int x=1; x

if(arr[x]

min = x;

}

return arr[min];

}

/**

给int数组进行选择排序。

@param arr 接收一个int类型的数组。*/

public static void selectSort(int[] arr){

for (int x=0; x

for(int y=x+1; y

if(arr[x]>arr[y]){

swap(arr,x,y);

}

}

}

}

/**

给int数组进行冒泡排序。

@param arr 接收一个int类型的数组。*/

public static void bubbleSort(int[] arr){ for (int x=0; x

for(int y=0; y

if(arr[y]>arr[y+1]){

swap(arr,y,y+1);

}

}

}

}

/**

给数组中元素进行位置的置换。

@param arr 接收一个int类型的数组。@param a 要置换的位置

@param b 要置换的位置

Java分页类封装

java分页类封装 分页类的主要有3个基本字段:当前页(页码)、分页大小(每页显示的数据大小)、数据总数目。 当前页:currentPage 分页大小:pageSize 数据总数目: recordTotalCount 注意: “/”:代表求商,如7/3=2 “%”:代表求余,如7%3=1 由基本字段派生出来的字段:是否有上一页previous、是否有下一页next、总页数totalPage 是否有上一页是由当前页决定,看当前页是否大于1 是否有下一页是由总页数决定,看当前页是否小于总页数 总页数是由数据总数目和分页大小决定。 例如:如果数据有92条,你要每页显示10条,92÷10=9...2 ,多出来的2条数据,也算1页,总页数就是9+1=10页。 怎么处理余数,看以下公式 公式1 总页数=[数据总数目]/[分页大小]+(余数>0,则+1,余数=0,则+0)。 如92÷10=9...2 ,9+1=10 公式2 总页数=[数据总数目]÷[分页大小]的向上取整。 如92÷10=9.2 ,向上取整为10 公式3 总页数=([数据总数目]+([分页大小]-1))/[分页大小] 不明白为什么[分页大小]要减去1? (92+(10-1))/10=10 => 90/10+ (2+(10-1))/10= > 9+1 它是这样处理余数的 不管数据总数目是多少,余数的范围是0<=余数<=被除数-1,所以,余数的范围是0<=余数<=分页大小-1 (余数值+(余数范围的最大值))/分页大小=> (2+(10-1))/10=1 也就是(余数值+(分页大小-1))/分页大小的结果是等价于公式1中的(余数>0,则+1,余数=0,则+0) 公式3不方便开发人员理解,但是就是有许多人用,本人不推荐用,没必要弄复杂,自己不明白,其他人也是一脸闷逼。最好就用公式一或公式二,简单明了迅速准确。

java面向对象—封装详解

Java面向对象 面向对象 在Java中,高手们的概念就是万物皆对象。 面向对象的概念: 面向对象:是基于面向过程的一种思想。 面向过程:强调的是功能行为。 面向对象:将功能封装进对象,强调具备了功能的对象。面向对象是基于面向过程的。 面向对象和面向过程: 图例:

面向对象特点: 1,面向对象就是一种常见的思想。符合人们的思考习惯。 2,面向对象的出现,将复杂的问题简单化。 3,面向对象的出现,让曾经在过程中的执行者,变成了对象中的指挥者。面试题:你怎么理解面向对象的? 1,它符合现在人们思考的一种习惯 2,它让我们复杂的事情简单化 3,让我们从曾经的执行都变为现在的指挥者 其实面试官你本身就在用面向对象的方式思考问题

因为以面试官您的能力而言,来了一个软件项目的话,您从需求分析到设计到开发到测试,都能完成,但是这样特别耗时间,所以您为了提高效率,您就需要 去找一些具备专业编程经验的人来完成这些项目,我正好就是那个具备专业编程经验的对象,您只要指挥我这个对象做事情就可以了,我会给您一个非常满意的 结果,至于过程您不用管。所以面试官您就在用面向对象的方式思考问题,来提高公司的效率,而我就是具备专业编程经验的人。 面向对象有三个特征:封装,继承,多态 以后的开发过程:其实就是找对象用。没有对象,就创建一个对象。 找对象,建立对象,使用对象,并维护对象的关系。 类和对象的关系: 类:就是对现实生活中事物的描述。 对象:就是这类事物,实实在在存在的个体。 想要描述:提取对象中共性内容。对具体的抽象。 映射到Java中描述就是class定义的类。 具体对象就是对应Java在堆内存中用new建立实体。 例子: 需求:描述小汽车。描述事物其实就是在描述事情的属性和行为。 分析: 1,属性:轮胎数。颜色。 2,行为:运行。 定义类其实就是在定义类中的成员。 成员:成员变量<-->属性,成员函数<-->行为。 属性对应是类中变量,行为对应的类中函数或方法。 其实定义类,就是在描述事物,就是在定义属性和方法,属性和行为共同成为类中的成员(成员变量和成员方法)。

Java面向对象编程上机-练习题汇总

【练习题】类的成员变量: 猜数字游戏:一个类A有一个成员变量v,有一个初值100。定义一个类,对A 类的成员变量v进行猜。如果大了则提示大了,小了则提示小了。等于则提示猜测成功。 【练习题】类的成员变量: 请定义一个交通工具(Vehicle)的类,其中有: 属性:速度(speed),体积(size)等等 方法:移动(move()),设置速度(setSpeed(int speed)),加速speedUp(),减速speedDown()等等. 最后在测试类Vehicle中的main()中实例化一个交通工具对象,并通过方法给它初始化speed,size的值,并且通过打印出来。另外,调用加速,减速的方法对速度进行改变。 【练习题】类的成员变量与方法、构造方法 在程序中,经常要对时间进行操作,但是并没有时间类型的数据。那么,我们可以自己实现一个时间类,来满足程序中的需要。 定义名为MyTime的类,其中应有三个整型成员:时(hour),分(minute),秒(second),为了保证数据的安全性,这三个成员变量应声明为私有。 为MyTime类定义构造方法,以方便创建对象时初始化成员变量。 再定义diaplay方法,用于将时间信息打印出来。 为MyTime类添加以下方法: addSecond(int sec) addMinute(int min) addHour(int hou) subSecond(int sec) subMinute(int min) subHour(int hou) 分别对时、分、秒进行加减运算。 【练习题】构造方法 编写Java程序,模拟简单的计算器。 定义名为Number的类,其中有两个整型数据成员n1和n2,应声明为私有。编写构造方法,赋予n1和n2初始值,再为该类定义加(addition)、减(subtration)、乘(multiplication)、除(division)等公有成员方法,分别对两个成员变量执行加、减、乘、除的运算。 在main方法中创建Number类的对象,调用各个方法,并显示计算结果。 【练习题】构造方法: 编写Java程序,用于显示人的姓名和年龄。 定义一个人类(Person),该类中应该有两个私有属性,姓名(name)和年龄(age)。定义构造方法,用来初始化数据成员。再定义显示(display)方法,将姓名和年龄打印出来。

Java面向对象程序设计 类封装

计算机工程系实验报告 课程名称:Java面向对象程序设计 班级:姓名:学号: 一、实验目的: 掌握使用类来封装对象的属性和功能。 二、实验要求: 1、编写一个Java应用程序,该程序中有3个类:Trangle,Lader和Circle,分别用来刻画三角形、梯形和圆形,具体要求如下: 1)Trangle类具有三个边长、周长和面积属性,具有返回周长、面积以及修改三个边的功能。另外还有一个boolean类型的属性,该属性用来判断三个数能否构成一个三角形。 2)Lader类具有上底、下底、高、面积属性,具有返回面积的功能。 3)Circle类具有半径、周长和面积属性,具有返回周长和面积的功能。 4)按程序模板的要求,将代码1-代码24替换为Java程序代码 5)给Trangle类增加三个方法,分别用来返回三个边:sideA,sideB,sideC。 6)让AreaAndLength类中的circle对象调用方法修改半径,然后输出修改后的半径以及修改半径后的圆的面积和周长。 2、编写一个类Person,可描述姓名、性别、年龄,可获取姓名、性别、年龄。该类含两个构造方法,一个无参数,一个带三个参数。编写主类,在主方法中分别用两个构造方法创建两个Person类的对象,分别输出这两个对象的姓名、性别、年龄。 三、程序代码: 1、程序模板 class Trangle { double sideA,sideB,sideC,area,length; boolean boo; public Trangle(double a,double b,double c) { sideA=a; sideB=b; sideC=c; //a,b,c分别赋值给sideA,sideB,sideC if(sideA+sideB>sideC&&sideB+sideC>sideA&&sideA+sideC>sideB) //a,b,c构成三角形的条件 { boo=true; //给boo赋值 } else {

java面向对象知识点总结

j a v a面向对象知识点总 结 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

1 类和对象 类: 类是用来描述一类事物的共性内容的, 类是抽象的; 创建类,如何描述 属性功能 用变量来描述属性 用方法来描述功能 对象: 就是现实中具体的事物,对象是具体的; 创建对象 类名对象名 = new 类名(); 如何通过对象访问类中属性和方法呢 对象名.变量名 对象名.方法名(); 只要是new的对象,就是新创建的,就会在内存中开辟一段单独的空间匿名对象 创建的对象没有赋值给具体的变量; 所以给匿名对象的属性赋值是没有任何意义的; 匿名对象使用场景

1 调用方法 2 作为参数传递 3 添加进容器中 This 关键字 This. 类中的普通方法访问到的成员前边都有this.这个关键字This. 就代表当前对象, 普通方法, 创建对象调方法, 谁调用就代表谁 This(); 可以用来在构造函数中调用本类与之相对应的构造函数使用注意事项: 1 this() 只能是构造函数的第一条执行语句 2 this() 不能在构造函数之间相互调用 3 this() 不能调用自己 构造函数(方法) 构造函数的作用 用来给对象进行初始话的(初始化就是指给对象的各个属性赋值) 构造函数何时执行 对象一创建就会调用与之相对应的构造函数

构造函数语法 修饰符没有返回值类型类名(参数列表){ 具体执行的代码 } 构造函数自动添加 当一个类中我们没有明确指定构造函数的话,jvm会自动帮我们添加一个空参数的构造, 如果我们指定了,就不添加了 构造函数和普通函数的区别 执行时机不同 对象一创建就会调用与之相对应的构造函数 普通函数只有被调用才会执行 return 1 就是用来在方法中返回具体结果(结果类型必须和方法的返回值类型一致) 2 即便方法的返回值类型是void,方法中也可以出现 return; 3 构造函数中也可以有return关键字 成员变量和局部变量 1 作用范围不同, 成员变量是定义在类中的,在整个类中都起作用 局部变量是定义在方法中的,在所在代码块起作用

java封装对象

package cn.itcast.introspector; import java.io.BufferedReader; /* 需求:编写一个工厂方法根据配置文件的内容,工厂方法返回对应的对象,并且把对象要有对应的属性值。 */ import java.io.FileReader; import https://www.360docs.net/doc/0511729104.html,ng.reflect.Constructor; import https://www.360docs.net/doc/0511729104.html,ng.reflect.Field; /* 以后我们开发框架的时候,我们是经常需要把一些数据封装到对象中的。 */ public class Demo1 { public static void main(String[] args) throws Exception { Person p = (Person) getInstance(); System.out.println(p); } //根据配置文件的内容生产对象的对象并且要把对象的属性值封装到对象中。

public static Object getInstance() throws Exception{ BufferedReader bufferedReader = new BufferedReader(new FileReader("obj.txt")); String className = bufferedReader.readLine(); //读取配置文件获取到完整的类名。 Class clazz = Class.forName(className); //通过class对象获取到无参的构造方法 Constructor constructor = clazz.getConstructor(null); //创建对象 Object o = constructor.newInstance(null); //读取属性值 String line = null; while((line = bufferedReader.readLine())!=null){ String[] datas = line.split("="); //通过属性名获取到对应的Field对象。 Field field = clazz.getDeclaredField(datas[0]); if(field.getType()==int.class){ field.set(o, Integer.parseInt(datas[1])); }else{ field.set(o, datas[1]); } } return o; } }

Java面向对象程序设计复习题附答案

Java面向对象程序设计复习题 一、选择题 1、下列哪个是Java中的关键字(C )。 A、run B、Integer C、default D、implement 2、下面关于Java.applet.Applet和其祖先类的描述语句哪个不对(B )。 A、Applet是Container的一种 B、Applet是Window的一种 C、Applet是Component的一种 D、Applet是Panel的一种 3、下列类DataOutputStream的构造方法正确的是(A )。 A、new dataOutputStream(new FileOutputStream(“out.txt”)); B、new dataOutputStream(“out.txt”); C、new dataOutputStream(new writer(“out.txt”)); D、new dataOutputStream(new FileWriter(“out.txt”)); 4、在switch(表达式)语句中,表达式的类型不能为(C )。 A、byte B、char C、long D、int 5、在接口MouseMotionListener中方法正确的是(A )。 A、Public void mouseDragged(MouseEvent) B、Public boolean mouseDragged(MouseEvent) C、Public void mouseDragged(MouseMotionEvent) D、Public boolean MouseDragged(MouseMotionEvent) 6、下面是一些异常类的层次关系 https://www.360docs.net/doc/0511729104.html,ng.Exception https://www.360docs.net/doc/0511729104.html,ng.RuntimeException https://www.360docs.net/doc/0511729104.html,ng.IndexOutOfBoundsException https://www.360docs.net/doc/0511729104.html,ng.ArrayIndexOutOfBoundsException https://www.360docs.net/doc/0511729104.html,ng.StringIndexOutOfBoundsException 假设有一个方法X,能够抛出两个异常,Array Index和String Index异常,假定方法X中没有try-catch语句,下面哪个答案是正确的。(B ) A、方法X应该声明抛弃ArrayIndexOutOfBoundsException和StringIndexOutOfBounds Exception。 B、如果调用X的方法捕获IndexOutOfBoundsException,则ArrayIndexOutOfBounds Exception和StringIndexOutOfBoundsException都可以被捕获。 C、如果方法X声明抛弃IndexOutOfBoundsException,则调用X的方法必须用Try-catch 语句 捕获。 D、方法X不能声明抛弃异常。 7、现有一变量声明为boolean aa;下面赋值语句中正确的是( D )。 A、aa=0 B、aa=True C、aa="true" D、aa=false 8、某类Example的main()方法参数为args,当输入数据Java Example cat时,args[0]的值为(A )。 A、cat B、Java C、example D、null 9、String s1=new String(“Java”);String s2=new String(s1)则下列哪个说法是正确的(C )。 A、表达式s1==s2为真 B、s1和s2是同一个对象

Java基础入门教程(适合所有初学者)

第1章 Java语言概述与面向对象思想 1 1.1 Java语言的发展 1 1.1.1 Java语言的产生 1 1.1.2 Java语言的发展 1 1.2 Java语言的特点 2 1.3 面向对象与面向过程的差异 3 1.3.1 面向过程思想回顾 4 1.3.2 面向对象思想介绍 4 1.4 面向对象程序设计中的主要概念和特征 4 1.4.1 主要概念 5 1.4.2 主要特征 5 *1.5 Java与C++的差异 5 1.6本章小结5 习题 5 第2章 Java语言开发环境 6 2.1 JDK 6 2.1.1 JDK的简介6 2.1.2 JDK的构成6 2.1.3 JDK的使用6 2.2 IDE 8 2.2.1 IDE简介8 2.2.2 JBuilder 9 2.2.3 Eclipse 9 2.2.4 相关资源9 2.3 Project管理9 2.3.1 Project的含义9 2.3.2 可行的Project组织模式9 2.3.3 主要开发工具的Project目录10 2.4 本章小结10 习题10 第1章 Java语言概述与面向对象思想 1.1 Java语言的发展 1.1.1 Java语言的产生以介绍面向对象编程的基本概念、基本理论为重点,结合Java语言的语法规则、编程特点和设计思想、强调容易发生错误和编程应注意的地方,使学生能对Java 技术有一个总体了解,通过本课程学习,使学生掌握Java语言的基础知识,理解和掌握面向对象程序设计的基本思想,熟练地使用Java语言进行程序的编写、编译以及调试工作 上世纪90年代初期,Sun公司在研究一种适用于未来的智能设备的编程语言,该语言要具有一些新的特性,以避免C++的一些不足。 该语言起初命名为Oak,来源于语言作者Gosling办公室窗外的一棵橡树(Oak)。后来在注册时候遇到了冲突,于是就从手中的热咖啡联想到了印度尼西亚一个盛产咖啡的岛屿,中文名叫爪哇,Java语言得名于此。 随着Internet的迅速发展,Web应用日益广泛,Java语言也得到了迅速发展。1994年,Gosling

Java面向对象练习经典题

JA V A程序作业题 1、设计一个包含多个构造函数的类,并分别用这些构造函数实例化对象。 2、编写一个类Calculate1,实现加、减两种运算,然后,编写另一个派生类Calculate2,实现乘、除两种运算。 3、建立三个类:居民、成人、官员。居民包含身份证号、姓名、出生日期,而成人继承自居民,多包含学历、职业两项数据;官员则继承自成人,多包含党派、职务两项数据。要求每个类的字段都以属性的方式对外提供数据输入输出的功能。 4、编写一个类,其中包含一个排序的方法sort(),当传入的是一串整数,就按照从小到大的顺序输出,如果传入的是一个字符串,就将字符串反序输出。 5. 编写一个控制台应用程序,定义一个类MyClass,类中包含有public、private以及protected数据成员及方法。然后定义一个从MyClass类继承的类MyMain,将Main方法放在MyMain中,在Main方法中创建MyClass类的一个对象,并分别访问类中的数据成员及方法。要求注明在试图访问所有类成员时哪些语句会产生编译错误。 7.创建一个类包含有protected数据。在相同的文件里创建第二个类,用一个方法操纵第一个类里的protected数据 9 编写一个控制台应用程序,完成下列功能,并回答提出的问题。 1) 创建一个类A,在构造函数中输出“A”,再创建一个类B,在构造函数中输出“B”。 2) 从A继承一个名为C的新类,并在C内创建一个成员变量B。不要为C创建构造函数。 3) 在Main方法中创建类C的一个对象,写出运行程序后输出的结果。 4) 如果在C中也创建一个构造函数输出“C”,整个程序运行的结果又是什么? 10 编写一个控制台应用程序,完成下列功能,并写出运行程序后输出的结果。 1) 创建一个类A,在A中编写一个可以被重写的带int类型参数的方法MyMethod,并在该方法中输出传递的整型值加10后的结果。 2) 再创建一个类B,使其继承自类A,然后重写A中的MyMethod方法,将A中接收的整型值加50,并输出结果。 3) 在Main方法中分别创建类A和类B的对象,并分别调用MyMethod方法。 11. 创建一个类,它存储一个int数据成员MyNumber,并给该数据成员创建属性,当该数据成员被存储时,将其乘以100;当其被读取时,将其除以100。 12. 定义一个车辆(Vehicle)基类,具有Run、Stop等方法,具有Speed(速度)、MaxSpeed (最大速度)、Weight(重量)等字段。然后以该类为基类,派生出bicycle、car等类。并编

java面向对象程序设计(戴开宇译版)课本知识整理

第一章计算机、程序和java概述 1.程序设计就是创建(或者开发)软件,软件也称为程序。 2.计算机是存储和处理数据的电子设备。计算机包括硬件和软件两部分。 3.一台计算机是由以下几个主要的硬件组件构成的:中央处理器(CPU),内存(主存),存储设备(例如磁盘和光盘),输入设备(例如鼠标和键盘),输出设备(例如显示器和打印机),通信设备(例如调制解调器和网卡) 4.数据和电信号通过总线在计算机的各个部分之间传输。 5.中央处理器(CPU)是计算机的大脑。他从内存中获取指令,然后执行这些指令。CPU 通常由两部分组成:控制单位和算术/逻辑单元。控制单元用于控制和协调其他组件的动作。算术/逻辑单元用于完成数值运算(加减乘除法)和逻辑运算(比较)。 6.核是处理器中实现指令读取和执行的部分。 7.二进制数字系统中的数,称为比特(bit,二进制数) 8.计算机中字节(byte)是最小的存储单位。每个字节由8个比特构成。各种类型的数据(例如,数字和字符)都被编码成字节序列。 9.计算机的存储能力是以字节和多字节来衡量的。KB

《Java面向对象程序设计》(第2版)课后答案

Java面向对象程序设计 (编著耿祥义张跃平) 习题1 1.James Gosling 2. (1)使用一个文本编辑器编写源文件。 (2)使用Java编译器(javac.exe)编译Java源程序,得到字节码文件。 (3)使用Java解释器(java.exe)运行Java程序 3.Java的源文件是由若干个书写形式互相独立的类组成的。 应用程序中可以没有public类,若有的话至多可以有一个public类。 4.系统环境path D\jdk\bin; 系统环境classpath D\jdk\jre\lib\rt.jar;.; 5. B 6.Java源文件的扩展名是.java。Java字节码的扩展名是.class。 7. D 8.(1)Speak.java (2)生成两个字节码文件,这些字节码文件的名字Speak.class 和Xiti8.class (3)java Xiti8 (4)执行java Speak的错误提示 Exception in thread "main" https://www.360docs.net/doc/0511729104.html,ng.NoSuchMethodError: main 执行java xiti8得到的错误提示 Exception in thread "main" https://www.360docs.net/doc/0511729104.html,ng.NoClassDefFoundError: xiti8 (wrong name: Xiti8) 执行java Xiti8.class得到的错误提示 Exception in thread "main" https://www.360docs.net/doc/0511729104.html,ng.NoClassDefFoundError: Xiti8/class 执行java Xiti8得到的输出结果 I'm glad to meet you 9.属于操作题,解答略。 习题2 1. D 2.【代码1】【代码2】错误//【代码3】更正为float z=6.89F; 3.float型常量后面必须要有后缀“f”或“F”。 对于double常量,后面可以有后缀“d”或“D”,但允许省略该后缀。4.public class Xiti4{ public static void main (String args[ ]){ char ch1='你',ch2='我',ch3='他'; System.out.println("\""+ch1+"\"的位置:"+(int)ch1); System.out.println("\""+ch2+"\"的位置:"+(int)ch2); System.out.println("\""+ch3+"\"的位置:"+(int)ch3); } } 5.数组名字.length 6.数组名字.length 7.【代码1】A,65 【代码2】-127

《JAVA面向对象程序的设计》练习题库B

第一章Java 简介 1. 下面( )是JDK中的Java运行工具.(选择二项) A. javac B. javam C. java D. javar 【解析】A C 2. 选出在Java中有效的注释声明(选择二项) A.//This is a comment B.*/This is a comment C./This is a comment D./*This is a comment*/ 【解析】AD 3. 下面( )命令可用于编译Java程序.(选择一项) A. java B. javac C. appletviewer D. javadoc 【解析】B 4. 下面( )数据类型可用于main()方法中传递的参数. (选择一

项) A. String B. Integer C. Boolean D. Variant 【解析】A 5. 在屏幕上显示的消息正确的语句是(选择一项) A. System.out.println(“I am Java Expert”); B. system.out.println(“I am Java Expert”); C. System.Out.Println(“I am Java Expert”); D. System.out.println(‘I am Java Expert’); 【解析】A 6. Java编译器会将Java程序转换为(选择一项) A. 字节码 B. 可执行代码 C. 机器代码 D. 以上所有选项都不正确 【解析】A 7. Java源代码文件的扩展名为(选择一项) A. .class

B. .java C. . D. 以上所有选项都不正确 【解析】B 第二章Java语言基础 1. 在Java中,byte数据类型的围是(选择一项) A. -32767~32768 B. -32768~32767 C. -127~128 D. -128~127 【解析】D 2. 以下( )是合法的标识符(选择二项) A. Te1_num B. emp1 C. 8678 D.batch.no 【解析】AB 3. 下列代码的输出结果是(选择一项)

Java中八种基本数据类型和八种封装数据类型

Java中八种基本数据类型和八种封装数据类型 初使值的求解过程及比较 作者:Zealjiang 1.八种基本数据类型 创建名为MemberTestBasic的java文件,其内容如下:public class MemberTestBasic { /** 八种基本类型 int, short, float ,double, long, boolean, byte, char */ int i; short s; float f; double d; long l; boolean bo; byte by; char c; public static void main(String[] args) { //创建对象m

MemberTestBasic m=new MemberTestBasic(); m.printMember(); } //为对象m创建一个printMember方法 public void printMember() { System.out.print("int->"+i+"\n"); System.out.print("short->"+s+"\n"); System.out.print("float->"+f+"\n"); System.out.print("double->"+d+"\n"); System.out.print("long->"+l+"\n"); System.out.print("boolean->"+bo+"\n"); System.out.print("byte->"+by+"\n"); System.out.print("char->"+c+"\n"); } } 运行结果如下:

java面向对象程序的设计(董小园版)

目录 第1章了解Java (2) 第2章面向对象的“对象” (7) 第3章对象的属性---变量详述 (9) 第4章对象的行为---成员方法详述 (12) 第5章生命周期及作用域 (17) 第6章Java常用类与函数库 (19) 第7章对象的进一步探讨--面向对象中的继承 (22) 第8章深入多态 (26) 第9章使用异常处理 (28) 第10章基于Swing的图形界面编程 (29) 第11章可视化程序的事件处理 (38) 第12章Java多线程机制 (51)

第1章了解Java 1.编写一个程序,将用户在命令行输入的24小时制时间转换为12小时制。 public class TimeTest{ public static void main(String args[]){ int time; time = Integer.parseInt(args[0]); if(time<0||time>24) System.out.println("输入的不是一个合法时间!"); else if(time>12) System.out.println("12小时制为"+(time-12)+"点"); else System.out.println("12小时制为"+time+"点"); } } 2.用户输入x的数值,根据如下规则输出计算后的结果y值。 x (x<1) Y = 2x -1 (1<=x<10) 3x -11 (x>=10) public class CalculateTest{ public static void main(String args[]){ float x,y; x = Float.parseFloat(args[0]); if(x<1) y = x; else if(1<=x&&x<10) y = 2*x-1; else y = 3*x-11; System.out.println(y); } } 3.编写一个Java应用程序,由命令行参数输入一个百分制成绩,要求打印出 成绩等级“A”、“B”、“C”、“D”、“E”。90分以上为“A”;80~89分为“B”;70~79分为“C”;60~69分为“D”;60分以下为“E”。 要求使用switch语句实现。 运行效果如图2所示:

Java-面向对象(基础篇)--构造方法私有化及对象数组

构造方法私有化及对象数组 一.构造方法私有化 1.问题的引出 类的封装性不只体现在对属性的封装上,实际上方法也是可以进行封装的,当然, 在方法封装中也包括了对构造方法的封装。 例: class Singleton{ private Singleton(){ } public void print(){ System.out.println("Hello World!"); } } 从之前的讲解中可以清楚的知道,一个类想使用,则必须要有实例化的对象,现在 要想调用Singleton类中的print()方法则一定要首先产生Singleton的实例化对象, 但是由于此时构造方法被私有化了,所以如果按照如下的程序编写,则肯定会出现 错误。 【错误代码,直接实例化Singleton类对象】 public class SingletonDemo02 { public static void main(String[] args){ Singleton s1=null; s1=new Singleton(); s1.print(); } } 程序运行的结果为: SingletonDemo02.java:13: 错误: Singleton()可以在Singleton中访问private s1=new Singleton(); ^ 1 个错误 从上述错误提示中可以发现,程序是在使用new关键字实例化对象时出现了错误, 而对于声明对象则没有任何的错误,那么该如何解释那? 封装是指一切外部不可见性,那么就意味着在外部根本无法调用被封装的构造方法,既然外部不能调用,那么在内部码? 【在内部产生Singleton的对象】 class Singleton{ staticSingleton instance=new Singleton(); private Singleton(){ } public void print(){

《Java面向对象编程》练习题

专题1 初识Java 一、填空题 1.自从Sun推出Java以来,按应用范围可分为三个版本,分别是()、()、()。2.环境变量的设置,若JDK安装在“D:\JDK”,则应设置Path为()、classpath为()。 3.Java源文件的扩展名为(),用Javac编译Java源文件,得到的字节码文件的扩展名为()。 4.如果Java源文件中有多个类,那么只能有一个类是()类。 二、选择题 1.作为Java应用程序入口的main方法,其声明格式是() A.public static int main(String args[]) B.public static void main(String args[]) C.public void main(String args[]) D.public int main(String args[]) 2.下面命令正确的是() A.java AppFirst.java B.java AppFirst C.java appfirst.class D.javac AppFirst 3.设有一个Java小程序,源程序名为FirstApplet.java,其HTML文件为FirstApplet.html,则运行该小程序的命令为() A.java FirstApplet B.javac FirstApplet.java C.appletviewer FirstApplet.java D.appletviewer FirstApplet.html 4.JDK安装完成后,主要的命令如javac、java等,都存放在根目录的()文件夹下。A.bin B.jre C.include D.doc 5.Java语言是一种__语言。 A.机器B.汇编C.面向过程的D.面向对象的 6、Java程序的最基本组成单位是__。 A.函数B.过程C.变量D.类 三、简答题(十分重要) 1.Java语言有哪些特点?

java基本数据类型与其封装类

java基本数据类型与其封装类 1 Boolean VS boolean public final class Boolean extends [url=file:///G:/html_zh_CN/html/zh_CN/api/java/lang/Object.html]Object[/url]implements [url=file:///G:/html_zh_CN/html/zh_CN/api/java/io/Serializable.html]Serializable[/url], [url=file:///G:/html_zh_CN/html/zh_CN/api/java/lang/Comparable.html]Comparable[/url]<[url=fil e:///G:/html_zh_CN/html/zh_CN/api/java/lang/Boolean.html]Boolean[/url]> Boolean 类将基本类型为boolean的值包装在一个对象中。一个Boolean类型的对象只包含一个类型为boolean的字段。 此外,此类还为boolean和String的相互转换提供了许多方法,并提供了处理boolean时非常有用的其他一些常量和方法。 2 Byte VS byte public final class Byte extends [url=file:///G:/html_zh_CN/html/zh_CN/api/java/lang/Number.html]Number[/url]implements [url=file:///G:/html_zh_CN/html/zh_CN/api/java/lang/Comparable.html]Comparable[/url]<[url=fil e:///G:/html_zh_CN/html/zh_CN/api/java/lang/Byte.html]Byte[/url]> Byte类将基本类型byte的值包装在一个对象中。一个Byte类型的对象只包含一个类型为byte的字段。 此外,该类还为byte和String的相互转换提供了几种方法,并提供了处理byte时非常有用的其他一些常量和方法。 3 Character VS char public final class Character extends [url=file:///G:/html_zh_CN/html/zh_CN/api/java/lang/Object.html]Object[/url]implements [url=file:///G:/html_zh_CN/html/zh_CN/api/java/io/Serializable.html]Serializable[/url], [url=file:///G:/html_zh_CN/html/zh_CN/api/java/lang/Comparable.html]Comparable[/url]<[url=fil e:///G:/html_zh_CN/html/zh_CN/api/java/lang/Character.html]Character[/url]> Character类在对象中包装一个基本类型char的值。Character类型的对象包含类型为char的单个字段。 此外,该类提供了几种方法,以确定字符的类别(小写字母,数字,等等),并将字符从大写转换成小写,反之亦然。 4 Double VS double public final class Double extends [url=file:///G:/html_zh_CN/html/zh_CN/api/java/lang/Number.html]Number[/url]implements [url=file:///G:/html_zh_CN/html/zh_CN/api/java/lang/Comparable.html]Comparable[/url]<[url=fil e:///G:/html_zh_CN/html/zh_CN/api/java/lang/Double.html]Double[/url]> Double类在对象中包装了一个基本类型double的值。每个Double类型的对象都包含一个double类型的字段。 此外,该类还提供了多个方法,可以将double转换为String,将String转换为double,还提供了其他一些处理double时有用的常量和方法。

《JAVA面向对象编程》([PDF] 孙卫琴著)

《JAVA面向对象编程》[PDF] 孙卫琴著 【目录】 第1章面向对象开发方法概述 1 1.1 结构化的软件开发方法简介3 1.2 面向对象的软件开发方法简介5 1.2.1 对象模型6 1.2.2 UML:可视化建模语言6 1.2.3 Rational Rose:可视化建模工具7 1.3 面向对象开发中的核心思想和概念7 1.3.1 问题领域、对象、属性、状态、行为、方法、实现7 1.3.2 类、类型9 1.3.3 消息、服务10 1.3.4 接口11 1.3.5 封装、透明12 1.3.6 抽象16 1.3.7 继承、扩展、覆盖17 1.3.8 组合19 1.3.9 多态、动态绑定22 1.4 UML语言简介24 1.4.1 用例图24 1.4.2 类框图25 1.4.3 时序图26 1.4.4 协作图27 1.4.5 状态转换图27 1.4.6 组件图28 1.4.7 部署图29 1.5 类之间的关系29 1.5.1 关联(Association)29 1.5.2 依赖(Dependency)31 1.5.3 聚集(Aggregation)31 1.5.4 泛化(Generalization)32 1.5.5 实现(Realization)32 1.5.6 区分依赖、关联和聚集关系33 1.6 实现Panel系统35 1.6.1 扩展Panel系统37 1.6.2 用配置文件进一步提高Panel系统的可维护性39 1.6.3 运行Panel系统40 1.7 小结41 1.8 思考题42 第2章第一个Java应用43 2.1 创建Java源文件43 2.1.1 Java源文件结构44

相关文档
最新文档