面向对象思想引入:前面我们讲过数组,当有多个数组都需要遍历时,我们可以将遍历的代码封装到方法中,需要遍历时,就调用相应的方法即可,提高代码的复用性。在对数组遍历的基础上继续增加需求,比如获取最值,数值逆序等,同样需要将这些功能封装到相应的方法中。这样继续封装会发现方法越来越多,于是就想能不能将这些方法继续进行封装呢?通过前面的讲解我们知道类是可以存放方法的,所以,我们就考虑使用类封装来这多个方法,将来再做数组的操作时,不用去找具体的方法,先找到这个类,然后使用这个类中的方法。这就是面向对象思想的编程方式。
面向对象思想概述:完成一个需求的步骤:首先是搞清楚我们要做什么,然后在分析怎么做,最后我们再代码体现。一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,完成我们的需求。 在上面的每一个具体步骤中我们都是参与者,并且需要面对具体的每一个步骤和过程,这就是面向过程最直接的体现。 那么什么是面向过程开发呢? 面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。 面向过程的代表语言:C语言
事物:
属性:用来描述事物的信息
行为:用来事物能够做什么
类:是一组相关对象的集合
成员变量:事物的属性
成员方法:事物的行为
定义一个类其实就是定义它的成员变量和成员方法;
对象:是该类事物的具体表现
举例:
类:学生(属性:性别、姓名、年龄、、、、、;行为:学习、吃饭、睡觉、、、、);
对象:班长
类:成员变量:gender,name,age......;成员方法:study(),eat(),sleep().......
定义成员变量:位置:在类中,方法外;格式:数据类型 变量名
定义成员方法:位置:在类中;格式:修饰符 返回值类型 方法名 参数列表{ 方法体;};
成员变量与局部变量的区别:
1、定义的位置不同:
成员变量定义在类中,方法外;
局部变量定义在类中,方法内;
2.内存位置也不同:
成员变量在栈内存中;
局部变量在堆内存中;
3.初始化值不同:
成员变量系统会给予默认值;
局部变量系统不会给予默认值,必须在定义的时候赋值,或者在方法使用中赋值,才能使用;
4.生命周期不同:
成员变量随着对象的创建而创建,随着对象的消失而消失;
局部变量随着方法的调用而创建,随着方法的消失而消失;
class Bianliang {
String name;
int age;
public void show(int n){
n=10;
int a=20;
System.out.println(n);
System.out.println(a);
String name="车厘子";
System.out.println(name);
}
}
public class TestBianliang1{
public static void main(String[] args) {
Bianliang s1=new Bianliang();
s1.age=18;
s1.name="车厘子";
System.out.println(s1.age+","+s1.name);
s1.show(100);
}
}
形式参数问题:
1.当形式参数是基本数据类型的时候,将来调用方法的时候传入的是常量值,或者是该类型的变量;
2.当形式参数是引用数据类型的时候,将来调用方法的时候传的是该类对象的地址值;
3.当形式参数是基本参数类型的时候,在方法中对变量进行修改不会影响到外部实际的栈内存中的值;
4.当形式参数是引用数据类型的时候,在方法中对变量进行修改会影响到堆内存中的值;
class Test21 {
public int getSum() {
int a = 10;
int b = 20;
return a + b;
}
}
class student{
String name;
public void speak(){
System.out.println("我爱学习");
}
}
class Students1{
public void function(student s){
s.name="车厘子";
s.speak();
}
}
public class Test2 {
public static void main(String[] args) {
Test21 s = new Test21();
int a = 100;
int b = 200;
System.out.println(a + "," + b);?\\100,200
System.out.println(s.getSum());\\30
student x=new student();
Students1 y=new Students1();
System.out.println(x.name);\\null
y.function(x);
System.out.println(x.name);\\车厘子
}
}
匿名对象:没有名字的对象
使用场景:
1.调用次数仅调用一次的时候;
2.当放法的参数类型同一个类的时候;
package com.one;
class Phone1{
public void show(){
System.out.println("手机可以打电话");
}
}
class PhoneDemo{
public void function(Phone1 p) {
p.show();
}
}
public class Phone4 {
public static void main(String[] args) {
PhoneDemo s =new PhoneDemo();
Phone1 pd = new Phone1();
s.function(pd);
}
}
获取成员变量的方法:
1.提供一个公共的方法,打印所有的变量值;
2.单个使用获取方法,一个一个获取打印,更加方便灵活;
private:私有的
1.它可以修饰成员
2.被private修饰的成员只能在本类中访问使用
public class Phone {
private String brand;
private int price;
private String color;
//提供一个公共set方法
// 成员变量:被private修饰
// 成员方法:getXxx()和setXxx(),其中setXxx(..)形参的名字与成员变量名字一致,使用this关键字赋值
// show()
public void setBrand(String brand) {
this.brand = brand;
}
//提供一个公共get方法
public String getBrand() {
return brand;
}
public void setPrice(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return color;
}
public void show() {
System.out.println(brand + "," + price + "," + color);
}
}
class Testphone {
public static void main(String[] args) {
Phone s = new Phone();
// 赋值
s.setBrand("小米");
s.setPrice(2999);
s.setColor("黑");
System.out.println(s.getBrand() + s.getPrice() + s.getColor());
s.show();
// 单独获取数据
String brand= s.getBrand();
System.out.println(brand);
String color=s.getColor();
System.out.println(color);
int price=s.getPrice();
System.out.println(price);
}
}