一.OOP:Object Oriented Programming
1.面向过程和面向对象
面向过程 | 面向对象 | |
区别 | 事物比较简单,可以用线性的思维去解决 | 事物比较复杂,使用简单的线性思维无法解决 |
共同点 | 1.面向过程和面向对象都是解决实际问题的一种思维方式 2.二者相辅相成,并不是对立的。解决复杂问题,通过面向对象方式便于我们从宏观上把握事物之间复杂的关系、方便我们分析整个系统;具体到微观操作,仍然使用面向过程方式来处理 |
2.举例
如何吃午饭 | ||
面向过程 | 面向对象 | |
买菜 洗菜 点火 ...... 吃饭 | 饭店 厨师 在饭店吃厨师做好的饭 |
二.对象和类
- 世界由对象组成
- 类可以生成对象
- 类是对象的抽象,对象是类的实例化
对象和类的概念
- 对象:是具体的事物
- 类:是对象的抽象
先有具体的对象,然后抽象各个对象之间象的部分,归纳出类通过类再认识其他对象。
三.对象的特征
1.属性
属性——对象具有的各种特征
每个对象的每个属性都拥有特定值
2.方法
方法——对象执行的操作
对象:用来描述客观事物的一个实体,由一组属性和方法构成
四.类的特征
1.属性
属性(field),或者叫成员变量
▪属性用于定义该类或该类对象包含的数据或者说静态属性。属性作用范围是整个类体。在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。(数值:0,0.0 char:\u0000, boolean:false, 所有引用类型:null)
▪属性定义格式:
[修饰符] 属性类型 属性名 = [默认值]
2.方法
面向对象中,整个程序的基本单位是类,方法是从属于对象的
方法定义格式:
[修饰符] 方法返回值类型 方法名(形参列表 ) {
// n条语句
}
JAVA中方法参数传递是:值传递!
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";
}
}
可以类别之前学习的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 + "次机会");
}
}
}
}