内容主体大纲:
创建类与对象
掌握面向对象的三大特性:
--------封装
--------继承
--------多态
掌握抽象类和接口的使用
掌握程序中的异常处理
会使用面向对象思想进行编程
开发方法
结构化开发
-------面向功能划分软件结构
-------自顶而下
-------最小的子系统是方法
-------制约了软件的可维护性和可扩展性
面向对象开发
------把软件系统看成各种对象的集合
------系统结构较稳定
(面向对象程序设计Object Oriented Programming,称为OOP)
-----子系统相对独立
-----软件可重用性、可维护性和可扩展性强
万物皆对象
世界是由什么组成的呢??
各种各样的客观存在的事物(包括动物,植物,物品,风景名胜等等)
ps:分类是人们认识世界的一个很自然的过程,在日常生活中会不自觉地进行分类
我们身边的“对象”:
例:在超市遇到的购物者,就可以称为一个对象
顾客----------------------类名
姓名-狗娃---------------成员变量name
年龄-20------------------成员变量age
体重-60------------------成员变量weight
操作:-------------------成员方法
购买商品----------------buy()
对象的特征–属性
属性--------对象具有的各种特征
每个对象的每个属性都拥有特定值
----例如每个顾客的名字,年龄之类的属性都不一样,所以说每个对象的每个属性都拥有自己的独特性
对象的特征–方法
方法----对象执行的操作
例:顾客狗娃在购买商品,购买商品就是狗娃这个对象所执行的操作
对象:用来描述客观事物的一个实体,由一组属性和方法构成的
例:狗娃的各种属性加上他自己的方法(也就是行为),才组成了狗娃这个对象,再比如一个玻璃杯,玻璃就是他的构成,就是他的属性,喝水,就是他的方法,属性加上喝水的方法,就组成了玻璃杯这个对象。
类和对象
对象在之前已经解释过了,类又是什么呢
类:具有相同属性和方法的一组对象的集合。类是对象的抽象,对象时类的具体
类和对象的关系
------类是抽象的概念,仅仅是模板
例:学生,就是一个类,并不单单指某个学生,而是所有学生的集合
-----对象是一个你能够看得到、摸得着的具体实体
还是举学生的例子,比如我的小侄子,他所拥有的属性都很具体,身高体重什么的都有具体的数据,也有自己的行为方法,他很具体,所以他是一个对象,而不是一个模板,学生这个类就没有具体的数据,他没有具体的身高体重,仅仅是个模板
Java是面向对象的语言
所有Java程序都以类class为组织单元
关键字class定义自定义的数据类型
class Student {
String name;
int age;
String class1;
String hobby;
public Student() {
}
public Student(String name, int age,String class1,String hobby) {
this.name = name;
this.age = age;
this.class1 = class1;
this.hobby = hobby;
}
public void print() {
System.out.println(name);
System.out.println("年龄:" + age);
System.out.println("就读于:" + class1);
System.out.println("爱好:" + hobby);
}
}
这里的class Student就是一个类名
Java类模板
类将现实世界中的概念模拟到计算机程序中,这里说下组成:
public class 类名 {
//定义属性部分
属性1的类型 属性1;
…
属性n的类型 属性n;
//定义方法部分
方法1;
…
方法m;
}
类名首字母要大写,定义属性的称为成员变量,,定义方法的称为成员方法,在方法中声明的变量被称为局部变量,这里有个知识点,成员变量可以不赋初值,因为虚拟机会给其赋初值,int就是0,String 就是null,局部变量则必须通过我们赋予初值,不然会报错的哦
定义类的步骤:
(1)定义类名
(2)编写类的属性
(3)编写类的方法
类图
使用类图描述类
----用于分析和设计“类”
----直观、容易理解
Dog:类名
name:属性名 String:类型
+:public -:private
print():方法名,小括号里是参数:名字:类型,名字:类型(这是写法)
void:是返回值类型(void是无返回值)
如何创建和使用对象
使用对象的步骤
----创建对象
-----------类名 对象名 = new 类名();
例School center = new School();
-----------引用对象成员,使用.进行以下操作
----------------引用类的属性:对象名.属性
例center.name= "牛逼";
----------------引用类的方法:对象名.方法名()
例center.showCenter();
这样就可以调用类中的方法了,也可以对其成员变量赋值了。
练习一
创建学员类和教员类
class Student {
String name;
int age;
String class1;
String hobby;
public Student() {
}
public Student(String name, int age,String class1,String hobby) {
this.name = name;
this.age = age;
this.class1 = class1;
this.hobby = hobby;
}
public void print() {
System.out.println(name);
System.out.println("年龄:" + age);
System.out.println("就读于:" + class1);
System.out.println("爱好:" + hobby);
}
}
class Teacher {
String specialty;
String course;
String age1;
public Teacher(){
}
public Teacher(String name,String specialty,String course,String age1){
this.name = name;
this.specialty = specialty;
this.course = course;
this.age1 = age1;
}
public void print(){
System.out.println(name);
System.out.println("专业方向:" + specialty);
System.out.println("教授课程:" + course);
System.out.println("教龄:" + age1);
}
}
public class Demo1 {
public static void main(String[] args) {
/*
* School s = new School("北大青鸟","江苏徐州"); s.print();
*/
School s = new School();
s.name = "北大青鸟";
s.address = "江苏徐州";
s.print();
Student stu = new Student("张浩",26,"KG班","篮球、美术");
stu.print();
Teacher t = new Teacher("王老师","计算机","使用java语言理解程序逻辑","5");
t.print();
}
}
类的方法
通过前面案例,请思考:方法是什么?
-------方法是个“黑匣子”,完成某个特定的应用程序功能,并返回结果
-------类的方法定义类的某种行为(或功能)
如何定义一个方法?
public void show(){
System.out.println("姓名:" + name + ",密码:" + password);
}
要注意:(1)驼峰命名法(2)有意义(见名知意)
方法返回值
两种情况
----如果方法具有返回值,方法中必须使用关键字return返回该值,返回值类型为该值的类型
----返回值只能有一个
public class Student{
String name = "张三";
public String getName(){
return name;
}
}
----如果方法没有返回值,返回值类型为void
方法调用
----方法之间允许相互调用,不需要知道方法的具体实现,实现重用,提高效率
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/156c075e61e6db48be09010ba486cfe2.png)
方法调用应用
一个景区根据游人的年龄收取不同价格的门票。请编写游人类,根据年龄段决定能够购买的门票价格并输出
票价是20元
12岁以下免票
60岁以上半价
其他人全价
import java.util.Scanner;
class Tourist{
String name;
int age;
public void print(String name,int age){
if(age<12){
System.out.println(name+"的年龄为:"+age+",门票免费");
}else if(age>60){
System.out.println(name+"的年龄为:"+age+",门票价格为:10");
}else{
System.out.println(name+"的年龄为:"+age+",门票价格为:20");
}
System.out.println();
}
}
public class Demo2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Tourist t = new Tourist();
while(true){
System.out.print("请输入姓名:");
String name = input.next();
if(name.equals("n")){
System.out.println("退出程序");
break;
}
System.out.print("请输入年龄:");
int age = input.nextInt();
t.print(name,age);
}
}
}
练习2:用户密码管理
模拟实现用户密码管理:输入旧的用户名和密码,如果正确,方有权限更新;从键盘获取新的密码,进行更新
import java.util.Scanner;
class User{
String name = "admin1";
int num = 111111;
String name1;
int num1 ;
int count;
public void print(String name1,int num1){//一个比较的功能
if(name1.equals(name)&num1==num){
count =1;
System.out.println();
}else{
System.out.println("用户名和密码不匹配!您没有权限更新管理员信息");
}
}
}
public class Demo3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
User u = new User();
System.out.print("请输入用户名:");
String nameUser = input.next();
System.out.print("请输入密码:");
int num = input.nextInt();
u.print(nameUser, num);
if(u.count==1){
System.out.print("请输入新密码:");
num = input.nextInt();
u.num = num;
System.out.println("修改密码成功,您的新密码为:"+num);
}
}
}