面向过程的编程思想
解决问题的时候按照一定的过程流程
以过程为本 复用性较低 增加了很多代码的冗余
比如 把大象装冰箱分三步:
1.开冰箱 2.大象装里面 3.关冰箱
过程已经写死了 要是换成其他动物装冰箱 上述的步骤就不适用 需要重新写
面向对象的编程思想
解决问题的时候按照现实生活中的规律来考虑问题
在解决问题的过程中 考虑的是有多少个对象参与进来
即 实体是动作的支配者 没有实体 动作就发生不了
============================================================
类与对象
类——-抽象笼统的概念 描述一类事物 具有相同的特征(属性)和行为(方法) 比如 人类
人类有名字 有年龄 有性别———静态描述特征———属性
人类能吃饭 能说话 能学习———动态动作行为———方法
对象---具体的事物 比如 人类中一个具体的人<br /> 类中衍生出来的一个具体的个体 应该与自己的类具有相同的特征和行为
在计算机中利用面向对象的编程思想来做事<br /> 需要先定义一个类<br /> 若想做事 需要在描述的类中创建一个具体的个体(即对象)出来<br /> 然后由个体(对象)来做事
如何在计算机中创建(描述)一个类?<br /> 1.先创建一个类<br /> 2.在类的里面 利用属性或方法去描述这个类<br /> 3.创建一个当前类的对象 让对象调用属性/方法来做事(对象的创建在哪都可以 想在哪里用就在哪里创建)
类中的方法-----是用来做事的
方法的结构(共七块内容)[ ]中的结构可以没有<br /> 权限修饰符 [特征修饰符] 返回值类型 方法名字 (参数列表) [抛出异常] [{<br />方法执行体(抽象方法可以没有方法体)<br /> }]
方法必须存在的结构 返回值类型与参数列表里面的内容不一定要有<br /> 权限修饰符 返回值类型 方法名字(参数列表){<br /> }
权限修饰符共有四个 public protected 默认不写 private<br /> <br /> 1.无参数无返回值<br /> 2.无参数有返回值<br /> 3.有参数无返回值<br /> 4.有参数有返回值
参数列表可以理解为方法做事情之前需要提供的条件(可以多个)<br /> 返回值可以理解为方法做事情之后得到的一个结果(只有一个)
类描述好之后是不可以直接用的<br /> 需要创建当前类的对象 通过new的方式 如 Person p = new Person();
public class Person {//类的范畴要比主方法要大(主方法写在类里头)
//这个文件是在计算机内 画的一张图纸
//描述计算机里的小人长什么样
//属性----静态描述特征
//属性有三个必要的组成部分
//权限修饰符(必须存在) 特征修饰符(不是必须的) 数据类型 属性名 = 值(可以不赋值 按默认值存在)
//若不写明修饰符 就是默认修饰符 访问范围只在同包和本类中
public String name;//全局变量
public int age;
public String sex;
//方法-----描述做什么事情
//方法的设计需要分析 1.需不需要提供条件(参数) 2.需不需要给别人留下什么结果(返回值)
//设计一个方法 用来描述人类可以做吃饭这件事
public void eat (){//无参数无返回值
System.out.println("吃了一碗饭");
}
//设计一个方法 用来告诉别人我的名字
//若方法规定了返回值类型 方法内必须通过return关键字返回一个值
public String tellName(){//无参数有返回值
System.out.println("我的名字是");
return "小兰";
}
//描述人可以吃不同的东西
public void chiFan(int num,String eatWhat){//有参数无返回值
System.out.println("今天吃了"+num+"碗"+eatWhat);
}
//设计方法 买饮料
//条件 钱
//返回值 买到的饮料名字
public String buyDrink(int money){//有参数有返回值
if(money>5){
return "红牛";
}else{
return "矿泉水";
}
}
//line 表示需要花星星的行数 diretion 表示星星的方向
//true 表示右直角 false 表示左直角
//单分支语法结构如果代码有重复 一定可以优化
public void drawStar(int line,boolean diretion){
for(int i = 1;i<=line;i++) {
if(!diretion){
for (int j = 1; j <= line - i; j++) {
System.out.print(" ");
}
}
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
}
//主方法是程序的入口 它不属于任何一个类 它属于虚拟机
//主方法不是必须要有 可以写在任意类下
public static void main(String[] args){
/*
//创建对象 对象可以创建任意个
Person p = new Person();//里面没存有值
//在堆内存中产生的元素都有默认值 属性是有默认值的
//默认值 name = null age = 0 sex = null
p.name = "小兰";
p.age = 18;
p.sex = "女";
Person p1 = new Person();
//Person p1 = p; 相当于把p中的地址复制一份给p1
// 此时输出的是两行 小明今年16岁,性别是男
p1.name = "小明";
p1.age = 16;
p1.sex = "男";
System.out.println(p.name+"今年"+p.age+"岁,性别是"+p.sex);
System.out.println(p1.name+"今年"+p1.age+"岁,性别是"+p1.sex);
*/
//创建一个对象 人类对象
Person p = new Person();
//2.通过对象 调用方法 让方法按照描述的过程执行一遍
p.eat();
//通过有无括号来区分是方法还是属性
String myName = p.tellName();//有返回值可以不接收 没有返回值的没法接
System.out.println(myName);
p.chiFan(2,"过桥米线");
String drinkName = p.buyDrink(10);
System.out.println("买到了一瓶"+drinkName);
p.drawStar(6,true);
}
}