Java: 面向对象程序设计(上)
1. 类
类主要包含3个部分:
- 类属性:用来描述类本身所抽象出的事物的属性
- 类方法:用来描述这个被抽象出的事物可以做什么
- 构造方法:每个类都至少会有一个特殊的方法,该方法提供了创建类对象的初始化机制
类的定义:
【修饰符】 class 类名 【extends 父类名】 【implements 接口名】
{
类成员变量的声明;
类方法声明;
}
.java源文件结构:
Java程序的源文件是一个以“.java”结尾的文件,同时该文件中只能有一个类被声明为public类,若存在被声明为public的类时,类的名字必须与“.java”源文件名相同。
在一个源文件中,可以包含三种顶层元素:package(包声明)、import(类库导入语句)、class(类声明)。如果同时出现,必须按照package、import、class的顺序出现。
main()入口方法:
public static void main(String argv[])
{}
main()方法中的字符串数组arvg[]是用来从命令行接收用户参数的。
采用命令行执行Java程序的语句由四个部分组成:命令名,命令参数(是可选的),应用程序的名称(即源文件中的主类类名),用户输入的参数(多个参数之间用空格分隔)
访问修饰符public、private、protect、default
- public:可以跨类访问,而且可以跨包访问
- private:访问权限限制最窄的修饰符。只能被该类的对象访问,其子类不能访问,更不允许跨包访问
- proctet:能被类本身的方法及子类方法访问,即使子类在不同的包中也可以访问
- default:只允许在同一个包中进行访问
构造方法:
构造方法的名字和类的名字是相同的,并且没有任何类型的返回值,在构造方法前,只可以使用访问修饰符public,private及protected。
如果一个类中没有定义类的构造方法,系统会自动为这个类创建一个缺省的默认构造器,该构造器参数及方法均为空。
参数的传递:
传递的参数共有如下两种:
- 基本类型参数所传递的都是基本数据类型,包括数值型、布尔型等。在这种情况下所有的参数传递都采用值传递的方式。也就是说,当传递一个参数到方法中时,方法获得的只是该参数值的一个拷贝。因此,方法不会改变参数变量的值,只会使用该变量的值。
public class Example1 { public static void add(int a, int b)
{
int c=a+b;
System.out.println("c="+c);
a=c;
} public static void main(String[] args) {
int a=10;
int b=20; add(a,b);
System.out.println("a="+a); } }c=30
a=10
- 对象引用型参数,方法中获得的是该对象的内存地址,因此方法可以改变该对象中的属性,但是不能改变对象本身。
public class Example2 { public static void change(String str, char ch[])
{
str="Changed";
ch[0]='C';
} public static void main(String[] args) {
String s=new String("World");
char ch[]={'H','e','l','l','o'}; change(s,ch);
System.out.println(s+ " and "+ String.valueOf(ch)); } }World and Cello
成员方法重载与过载:
- Overriding:是面向对象语言的特性,只存在于父类和子类之间。当父类中的一个方法在继承它的子类中重新获得定义时,若该方法的方法名、参数、返回值类型均不变,只有方法体发生了变化时,就称子类的方法重载了父类的方法。
- Overloading,是编程语言均有的特性,与面向对象无关,存在于同一个类中。指的是多个方法拥有同一个名字,每个方法都有一套唯一的、不同于其他同名方法的参数列表。
public class Example {
int a=10;
int b=20;
int c=30; public Example()
{
System.out.println("a+b="+add(a,b));
System.out.println("a+b+c="+add(a,b,c));
} public int add(int x, int y)
{
return x+y;
} public int add(int x, int y, int z)
{
return x+y+z;
} public static void main(String[] args) {
new Example(); } }a+b=30
a+b+c=60
static静态成员:
static关键字可以用来修饰成员变量、方法以及代码模块。使用static修饰过的变量、方法都称之为静态成员。静态成员附属于类本身,而不附属于类的成员变量。
需要注意的是,静态方法中不能直接访问非静态的成员变量。
public class StaticExample1 {
static int num=10;
public static void main(String[] args) {
System.out.println(StaticExample1.num);
}
}
public class StaticExample2 {
public static void showString()
{
System.out.println("This is a static method.");
}
public static void main(String[] args) {
//不创建类的情况下,直接调用类中的静态方法
StaticExample2.showString();
}
}
final关键字:
final关键字可以用于类、方法、变量前,用来表示该关键字所修饰的类、方法、变量具有不可变的特性。
- final关键字用于基本数据类型变量前,这时表面该关键字修饰的变量是一个常量,在定义后,该变量的值就不能再被改变,同时在定义时必须被初始化
- final关键字用于方法声明前,被final修饰的方法被称为最终方法,该方法只能被调用,不能被重载,但是可以被过载
- final关键字用于类名前,final关键字修饰的类被称为最终类,该类不能被其他类继承
public class FinalExample {
static final double pie=3.14;
public static void circularityArea(String r)
{
double radius=Double.valueOf(r).doubleValue();
System.out.println("The circularity's area is: "+ pie*radius*radius);
}
public static void circularityPerimeter(String r)
{
double radius=Double.valueOf(r).doubleValue();
System.out.println("The circularity's area is: "+ pie*radius*2);
}
public static void main(String[] args) {
if(args.length!=1)
{
System.out.println("Error!");
System.exit(0);
}
System.out.println("The circularity's radius is: "+args[0]);
circularityArea(args[0]);
circularityPerimeter(args[0]);
}
}
判断对象所属类:
- 获取对象所属类的名字:String name = 对象名.getClass().getName();
- 使用instanceof运算符的语法格式: boolean bool = 对象名 instanceof 类名;
实战练习:
简单模拟一个商店客户折扣卡的功能,自定义Customer类用来保存某个商店中的客户的折扣卡信息。在主类CustomerDemo中,创建Customer类的一个数组对象,该数据对象中包含了3个Customer对象,用来保存3个不同的消费者各自持有的折扣卡信息。通过这3个对象,可以根据用户消费的金额来改变用户在本店中所能享受的折扣价格。
public class CustomerDemo {
Customer customer[] = new Customer[3];
public CustomerDemo()
{
customer[0]=new Customer("c001", "wangxyw","BeiJing","wangxyue@cn.ibm.com");
customer[1]=new Customer("c002", "Xu Quan", "ShangHai", "chunticha@yahoo,com");
customer[2]=new Customer("c003", "Xu Guang Yang", "BeiJing", "xugy@hotmail.com");
customer[0].buy(2800.00);
customer[0].setDiscount();
customer[1].buy(1688.00);
customer[1].setDiscount();
customer[2].buy(980.00);
customer[2].setDiscount();
for(int i=0; i<customer.length;i++)
{
System.out.println("customer[" + i + "]");
System.out.println("CardID: "+customer[i].getCardID());
System.out.println("name: "+ customer[i].getName());
System.out.println("cost: "+ customer[i].getCost());
System.out.println("discount: "+ customer[i].getDiscount()*10);
System.out.println("address:" + customer[i].getAddress());
System.out.println("email:" + customer[i].getEmail()+ "\n");
}
}
public static void main(String[] args) {
new CustomerDemo();
}
}
class Customer{
private String cardID;
private String name;
private double cost=0;
private String address;
private String email;
private double discount = 1;
public Customer(String id, String name, String add, String email)
{
cardID=id;
this.name=name;
address=add;
this.email=email;
}
//用于购买商品后,增加用户消费值
public void buy(double cost)
{
this.cost+=cost;
}
//根据用户的消费额度来改变用户所能享受的折扣
public void setDiscount()
{
if(cost>2000.00)
discount-=0.1;
else if(cost>1000.00)
discount-=0.05;
}
//用于获取和设置用户地址的方法
public String getAddress()
{
return address;
}
public void setAddress(String address)
{
this.address=address;
}
//用于获取和设置用户卡号的方法
public String getCardID()
{
return cardID;
}
public void setCardID(String cardID)
{
this.cardID=cardID;
}
//用于获取用户消费金额的方法
public double getCost()
{
return cost;
}
//用于获取用户的折扣值得方法
public double getDiscount()
{
return discount;
}
//用于获取和设置用户信箱地址的方法
public String getEmail()
{
return email;
}
public void setEmail(String email)
{
this.email=email;
}
//用于获取和设置用户名的方法
public String getName()
{
return name;
}
public void setName(String name)
{
this.name=name;
}
}
customer[0]
CardID: c001
name: wangxyw
cost: 2800.0
discount: 9.0
address:BeiJing
email:wangxyue@cn.ibm.com
customer[1]
CardID: c002
name: Xu Quan
cost: 1688.0
discount: 9.5
address:ShangHai
email:chunticha@yahoo,com
customer[2]
CardID: c003
name: Xu Guang Yang
cost: 980.0
discount: 10.0
address:BeiJing
email:xugy@hotmail.com
Java: 面向对象程序设计(上)的更多相关文章
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- 20145213《Java程序设计》实验二Java面向对象程序设计实验报告
20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...
- 20145206《Java程序设计》实验二Java面向对象程序设计实验报告
20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
- JAVA课程实验报告 实验二 Java面向对象程序设计
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:韩玉琪 学号:20135317 成绩: 指导教师:娄嘉 ...
- 20145225唐振远 实验二 "Java面向对象程序设计"
20145225<Java程序设计> 实验二 Java面向对象程序设计 实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S ...
- 20145208 实验三 Java面向对象程序设计
20145208 实验三 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步 ...
- 20145208 实验二 Java面向对象程序设计
20145208 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步 ...
- 20145221 《Java程序设计》实验报告二:Java面向对象程序设计
20145221 <Java程序设计>实验报告二:Java面向对象程序设计 实验要求 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
- Java实验报告二:Java面向对象程序设计
Java实验报告二:Java面向对象程序设计 ...
- Java面向对象程序设计--与C++对比说明:系列1(面向对象基础)
面向对象程序设计作为一种重要的程序设计思想,在近些年来得到广泛的推崇.而Java和C++更是面向对象程序设计语言中的翘楚,要彻底摸清面向对象程序设计的精髓和在实际应用中更加高效的进行代码设计 ...
随机推荐
- 我对java的理解(二)——反射是小偷的万能钥匙
在我们生活中,车上或者路上有时候会遇到一种很讨厌的人——“小偷”,趁我们不注意或者疏忽的时候拿走属于我们的东西.更有甚者,趁我们不在家的时候,手持一把万能钥匙,打开我们的房门,悠闲的查看房间的布置,翻 ...
- OpenCV——径向模糊
参考来源: 学习OpenCV:滤镜系列(5)--径向模糊:缩放&旋转 // define head function #ifndef PS_ALGORITHM_H_INCLUDED #defi ...
- fswebcam 获取图片
/************************************************************************* * fswebcam 获取图片 * 说明: * 通 ...
- Arc082_F Sandglass
Description有一个沙漏由两个上下相通玻璃球$A$和$B$构成,这两个玻璃球都含有一定量的沙子,我们暂且假定$A,B$中位于上方的玻璃球的为$U$,下方的玻璃球为$L$,则除非$U$中没有沙子 ...
- 51Nod1766 树上的最远点对
1766 树上的最远点对 n个点被n-1条边连接成了一颗树,给出a~b和c~d两个区间,表示点的标号请你求出两个区间内各选一点之间的最大距离,即你需要求出max{dis(i,j) |a<=i&l ...
- 洛谷 P2777 [AHOI2016初中组]自行车比赛
题目描述 小雪非常关注自行车比赛,尤其是环滨湖自行车赛.一年一度的环滨湖自行车赛,需要选手们连续比赛数日,最终按照累计得分决出冠军.今年一共有 N 位参赛选手.每一天的比赛总会决出当日的排名,第一名的 ...
- ssh免密码登录配置方法,(图示加命令)
首先,说明一下我们要做的是,serverA 服务器的 usera 用户免密码登录 serverB 服务器的 userb用户. 我们先使用usera 登录 serverA 服务器 [root@serve ...
- Java enum(枚举)使用详解之一
enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容: 1. 原始 ...
- linux日常管理-rsync常用选项详解
-av 同步目录 写法 123/ /tmp/333/ 意思是把123下的文件同步到/tmp/333/下 结尾不加/ 只同步目录 两个目录一样的. //////////////////////// ...
- JavaScript之闭包(重新认识)
最近又重新学习了闭包,发现之前没有深刻理解作用域链,学习作用域链后对闭包才可以做到真正的理解. 闭包是指有权另一个函数作用域中变量的函数.要理解闭包首先理解作用域链. 执行环境 ...