【学懂Java】(四)面向对象编程-1

时间:2023-01-19 12:57:09

一.OOP:Object Oriented Programming

【学懂Java】(四)面向对象编程-1

1.面向过程和面向对象


面向过程

面向对象

区别

事物比较简单,可以用线性的思维去解决

事物比较复杂,使用简单的线性思维无法解决

共同点

1.面向过程和面向对象都是解决实际问题的一种思维方式

2.二者相辅相成,并不是对立的。解决复杂问题,通过面向对象方式便于我们从宏观上把握事物之间复杂的关系、方便我们分析整个系统;具体到微观操作,仍然使用面向过程方式来处理

2.举例

如何吃午饭

面向过程


面向对象

买菜

洗菜

点火

......

吃饭

饭店

厨师

在饭店吃厨师做好的饭

二.对象和类

  1. 世界由对象组成
  2. 类可以生成对象
  3. 类是对象的抽象,对象是类的实例化

对象和类的概念

  • 对象:是具体的事物
  • 类:是对象的抽象

先有具体的对象,然后抽象各个对象之间象的部分,归纳出类通过类再认识其他对象。

三.对象的特征

1.属性

属性——对象具有的各种特征

每个对象的每个属性都拥有特定值

2.方法

方法——对象执行的操作

对象:用来描述客观事物的一个实体,由一组属性和方法构成

【学懂Java】(四)面向对象编程-1

四.类的特征

1.属性

属性(field),或者叫成员变量

▪属性用于定义该类或该类对象包含的数据或者说静态属性。属性作用范围是整个类体。在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。(数值:0,0.0    char:\u0000,    boolean:false,    所有引用类型:null)

▪属性定义格式:

[修饰符] 属性类型 属性名 = [默认值]

2.方法

面向对象中,整个程序的基本单位是类,方法是从属于对象的

方法定义格式:

[修饰符] 方法返回值类型 方法名(形参列表 ) {
// n条语句
}

JAVA中方法参数传递是:值传递

【学懂Java】(四)面向对象编程-1

public class Student 
{
//定义属性
int StuNumber;
String name;
int age = 20;
//定义方法
void study()
{
System.out.println("学习不要谈恋爱");
}
void play()
{
System.out.println("只学习不玩耍,聪明孩子也变傻");
}
void eat(String food)
{
System.out.println("吃"+food);
}
}

但是大家要注意,不是每一个类都有方法和属性

五.创建和使用对象

既然已经创建了一个类,那就需要学习如何创建一个对象:

new关键字来创建一个对象:​​类名 对象名 = new 类名()​

对象的使用:​​对象名称.属性​​​​对象名称.方法​

public class Student
{
//定义属性
int StuNumber;
String name;
int age;
//定义方法
void study()
{
System.out.println("学习不要谈恋爱");
}
void play()
{
System.out.println("只学习不玩耍,聪明孩子也变傻");
}
void eat(String food)
{
System.out.println("吃"+food);
}

public static void main(String[] args)
{
Student stu1 = new Student();
System.out.println("默认值");
System.out.println(stu1.name);
System.out.println(stu1.age);
System.out.println(stu1.StuNumber);
stu1.study();
stu1.eat("peach");
stu1.name = "Jack";
System.out.println("录入值");
//修改属性值
stu1.StuNumber = 2023119;
stu1.age = 18;
System.out.println(stu1.name);
System.out.println(stu1.age);
System.out.println(stu1.StuNumber);
stu1.study();
stu1.eat("peach");
stu1.name = "Jack";
}
}

【学懂Java】(四)面向对象编程-1

可以类别之前学习的C语言结构体

六.案例

输入管理员名称和密码,正确才有权限更新,错误次数超过三次显示锁定。

import java.net.SocketTimeoutException;
import java.util.Scanner;

public class Administrator {

String loginName = "ak27";
String password = "12345";

public void introduce(){
System.out.println(loginName);
System.out.println((password));
}

public static void main(String[] args) {
Administrator admin = new Administrator();
int count = 0;
for(count=0; ; count++) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String name = sc.nextLine();
System.out.println("请输入密码:");
String psd = sc.nextLine();
if (name.equals(admin.loginName) && psd.equals(admin.password)) {
System.out.println("密码以及用户名正确");
System.out.println("请输入新的用户名");
admin.loginName=sc.nextLine();
System.out.println("请输入新的密码");
admin.password=sc.nextLine();
break;
}
else {
int left = 2 - count;
if (count == 2) {
System.out.println("密码或用户名错误超过三次,系统锁定");
break;
}
System.out.println("密码或用户名错误,还有" + left + "次机会");
}
}
}
}

案例中在进行字符串比较时,使用的是equals。

字符串在进行比较时,==比较的是地址,equals比较的是具体的值。


练习:尝试将下述代码设计的更加符合事实:例如设密码要重复输入两次

import java.net.SocketTimeoutException;
import java.util.Scanner;

public class Administrator {

String loginName = "ak27";
String password = "12345";

public void introduce(){
System.out.println(loginName);
System.out.println((password));
}

public static void main(String[] args) {
Administrator admin = new Administrator();
int count = 0;
for(count=0; ; count++) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String name = sc.nextLine();
System.out.println("请输入密码:");
String psd = sc.nextLine();
if (name.equals(admin.loginName) && psd.equals(admin.password)) {
System.out.println("密码以及用户名正确");
System.out.println("请输入新的用户名");
admin.loginName=sc.nextLine();
System.out.println("请输入新的密码");
admin.password=sc.nextLine();
break;
}
else {
int left = 2 - count;
if (count == 2) {
System.out.println("密码或用户名错误超过三次,系统锁定");
break;
}
System.out.println("密码或用户名错误,还有" + left + "次机会");
}
}
}
}