面向过程和面向对象
面向过程:
代表语言C。
我们是执行者,举例,求数组中的最大值
定义数组,
定义变量max,将数组中的第一个元素作为参照物
遍历(使用方法定义)
调用遍历的功能
输出结果
按照实际的需求,一步一步分析,代码实现,完成结果输出。
面向对象:
万物皆对象
特点:
1)更符合生活中的思想行为习惯
2)角色发生了变化
从执行者变成指挥者
3)指挥一个具体的事物完成事情(可以将复杂的事情简单化)
举例:
买笔记本电脑
面向过程:了解电脑的相关品牌以及特点----->了解相关笔记本电脑的配置-------->了解相关的电脑配置的价格------->
赛格电脑城看电脑-------> 买电脑
面向对象:
了解电脑的相关品牌以及特点------->只需要找懂电脑的人买电脑---------->收到电脑
洗衣服:
面向过程:
脱下脏衣服------>找一个盆----->加水+加洗衣液------>泡一泡----->搓一搓---->晾一晾
面向对象;
脱下脏衣服------>将衣服放入到全自动洗衣机----->晾一晾
做饭:
面向过程:
买菜—>砍价---->摘菜----->洗菜---->切菜----->炒菜------>加入调料---->出锅
面向对象:
下馆子—>服务员(点菜)---->厨师(炒菜)---->等待出锅
找一个对象 -----> 等待出锅
5000
8000
面向对象由于面向过程,虽然代码量大了,后期维护和管理比方便!
什么面向对象开发?
就是不断的创建对象,使用对象,指挥对象做事情。
键盘录入
导包
Scanner sc = new Scanner(System.in) ;
int a = sc.nextInt() ;
int b = sc.nextInt() ;
面向对象设计原则:
其实就是在管理和维护对象之间的关系
面向对象的三大特征:
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
成员变量和局部变量的区别
1)在类中书写的位置不同
成员变量:类中方法外定义的变量
局部变量:方法定义中,或者是在方法声明上定义的变量
2)在内存中的位置不同:
成员变量:存储在堆内存
局部变量:存在栈内存(跟方法有关)
3)生命周期不同:
成员变量:跟类有关系,当该对象创建完毕,整个类中的变量全部初始化完,等待Gc回收
局部变量:跟方法有关,随着方法的调用而存在,随着方法的调用完毕而消失
4)初始化不同:
成员变量: 可以不初始化,系统默认给默认初始化值(引用类型:null,基本类型:根据具体类型)
局部变量:
1)定义变量
在使用之前进行赋值,否则编译不通过
2)直接初始化
形式参数问题
基本类型作为参数传递: 形式参数的改变对实际参数没有影响!
引用类型作为参数传递: 形式参数改变会直接影响实际参数,(传递的是当前对象的空间地址值)
匿名对象
概述:
没有名字对象
应用场景:
a)对象调用方法仅仅一次的时候
b)作为实际参数传递
举例:new Teacher() ; //直接开辟堆内存空间,没有对象名
封装
概述:
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
函数方法、接口、类都是java中封装的体现,private也是封装的一种体现形式
private关键字:
是一个权限修饰符。
可以修饰成员(成员变量和成员方法)
被private修饰的成员只在本类中才能访问。
this:
代表所在类的对象引用
类的成员方法
类
成员变量
构造方法
无参构造方法
带参构造方法
成员方法
getXxx()
setXxx()
给成员变量赋值的方式
无参构造方法+setXxx()
带参构造方法
练习篇:
A:学生事物
属性:姓名,年龄,性别,发型
行为:吃饭,抽烟,打游戏,学习Java
B:键盘录入长方形的长和宽,计算长方形的周长和面积,请使用面向对象的方式解决!
C:请将给定的数组,{10,87,65,34,57} 进行冒泡排序,并将排好序的数组输出到控制台
------------------------------------我是一条华丽的分割线------------------------------------------
答案篇:
/*
A:学生事物
属性:姓名,年龄,性别,发型
行为:吃饭,抽烟,打游戏,学习Java
*/
class Student{
//成员变量
String name; //姓名
int age; //年龄
String gender; //性别
String hairdo; //发型
//成员方法
//吃饭
public void eat(){
System.out.println("学习饿了要吃饭");
}
//抽烟
public void smoking(){
System.out.println("学习困了可以抽烟");
}
//打游戏
public void playGame(){
System.out.println("学习无聊了可以打游戏");
}
//学习Java
public void study(){
System.out.println("要学习就学Java");
}
}
//定义一个测试类
class StudentDemo{
public static void main(String[] args){
//创建学生类具体的对象
//类名 对象名 = new 类名();
Student s = new Student();
//对象名.成员变量;
//null 0 null null
System.out.println(s.name+"\t"+s.age+"\t"+s.gender+"\t"+s.hairdo+"\t");
//给当前对象p的成员赋值
s.name = "张三";
s.age = 27;
s.gender = "男";
s.hairdo = "卷发";
//张三 27 男 卷发
System.out.println(s.name+"\t"+s.age+"\t"+s.gender+"\t"+s.hairdo+"\t");
}
}
/*
B:键盘录入长方形的长和宽,计算长方形的周长和面积,请使用面向对象的方式解决!
*/
import java.util.Scanner;
//长方形计算类
class oblongCaculate{
//周长方法:C= 2*(a+b)
public double circumference(double a,double b){
double c = 2*(a+b);
return c;
}
//面积方法:S = a*b
public double area(double a,double b){
double s = a*b;
return s;
}
}
class oblongDemo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请依次输入长方形的长和宽");
double l = sc.nextDouble();
double w = sc.nextDouble();
if(l<=0 || w<=0){
System.out.println("非法数据");
return;
}
oblongCaculate oc = new oblongCaculate();
double c = oc.circumference(l,w);
System.out.println("长方形的周长为:"+c);
double s = oc.area(l,w);
System.out.println("长方形的面积为:"+s);
}
}
/*
C:请将给定的数组,{10,87,65,34,57} 进行冒泡排序,并将排好序的数组输出到控制台
*/
//数组排序类
class SortArray{
//冒泡排序方法
public void bubbleSort(int[] arr){
for(int i = 0; i<arr.length; i++){
for(int j = 0; j<arr.length-1-i; j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
}
//数组打印类
class PrintArray{
public void printArr(int[] arr){
System.out.print("[");
for(int i = 0; i<arr.length; i++){
if(i == arr.length - 1){
System.out.println(arr[i]+"]");
}else{
System.out.print(arr[i]+", ");
}
}
}
}
//测试类
class ArraySortDemo{
public static void main(String[] args){
int[] arr = {10,87,65,34,57};
System.out.print("数组排序前:");
PrintArray print = new PrintArray();
print.printArr(arr);
System.out.print("数组排序后:");
SortArray sort = new SortArray();
sort.bubbleSort(arr);
print.printArr(arr);
}
}