面向对象 类与对象
面向过程:面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求
面向过程的代表语言:c语言
面向对象:将步骤跟功能进行封装,封装时根据不同的功能进行不同的封装,功能类似的封装在一起,使用时找到对应的类即可(基于面向过程)
面向对象思想特点:
1.更符合我们思考习惯的特点
2.将复杂的事情简单化
3.将我们从执行者变成了指挥者
java语言最基本的单位是类
类:是一组相关的属性和行为的集合
对象:就是该事务的具体体现
类的定义:类是用来描述现实世界的事物的
事物: 属性(事物的描述信息),行为(事物能够做什么)
类:成员变量(不需要给初始化值)
成员方法(去掉static关键字)
练习:定义学生类(成员变量 姓名 年龄)
(成员方法 学习 吃饭)
public class Student {
String name;
int age;
public static void Study() {
System.out.println("好好学习,天天向上");
}
public static void Sleep() {
System.out.println("沉迷睡觉,无法自拔");
}
Student s=new Student();
System.out.println("s.name"+s.name);
System.out.println("s.age"+s.age);
System.out.println("------------------------------------");
s.name="林志玲";
s.age=40;
s.Study();
s.Sleep();
System.out.println("s.name="+s.name);
System.out.println("s.age="+s.age);
使用类,就是使用类的成员
使用一个类的成员必须首先拥有该类的对象
格式:类名 对象名=new 类名();
成员变量:对象名.变量名
对象名.方法名(…)
练习2:定义一个手机类
成员变量:品牌 价格 颜色
成员方法: 打电话 发短信
String brand;//品牌属性
int price;
String color;
public static void Call(String name) {
System.out.println("打电话给"+name);
}
public static void SendMessage() {
System.out.println("群发短信");
引用
Phone p=new Phone();
System.out.println(p.brand);
System.out.println(p.price);
System.out.println(p.color);
p.brand="华为";
p.price=4999;
p.color="black";
p.Call("林志玲");
p.SendMessage();
System.out.println(p.brand);
System.out.println(p.price);
System.out.println(p.color);
成员变量和局部变量的区别
1.在类中的位置不同
成员变量:类中,方法外
局部变量:方法中或者方法声明上(形式参数)
2.内存中的位置不同
成员变量在堆内存
局部变量在栈内存
3.生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
4.初始化值
成员变量:有默认值
局部变量:没有默认值。必须先定义,赋值,最后使用
private关键字
通过对象直接访问成员变量,会存在安全问题
private关键字:
是一个修饰符,可以修饰成员变量和成员方法
被private修饰的成员只能在本类中被访问
针对private修饰的成员变量,我们会相应的提供getxx()和setxx获取和设置成员变量的值
方法用public修饰
private String name;
private int age;
public void setName(String n) {
name=n;
}
public void setAge(int a) {
age=a;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
Student s=new Student();
s.setAge(22);
s.setName("林志玲");
System.out.println(s.getName()+s.getAge());
封装、继承、多态是面向对象的三大特征
封装是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。
封装原则:
将不需要对外提供的内容都隐藏起来
把属性隐藏,提供公共方法对其访问
成员变量private 提供对应的getXxx()/setXxx方法
好处:
通过方法来控制成员变量的操作,提高了代码的安全性
把代码用方法进行封装,提高了代码的复用性
this关键字:代表所在类的对象引用,方法被哪个对象使用,this就代表那个对象
如果有局部变量名和成员变量名相同,在局部使用的时候,采用的是就近原则
this.成员变量=局部变量
使用场景:局部变量隐藏成员变量
**构造方法:**给对象的数据进行初始化
格式:方法名和类名相同
没有返回值类型,连void都不能写
没有具体的返回值
如何调用构造方法:通过new 关键字调用
格式:类名 对象名=new 构造方法(。。。);
构造方法的注意事项:1.如果我们没有给出构造方法,系统将会提供一个默认的无参构造方法供我们使用
<构造方法可以重载>
2.给出构造方法,系统将不在提供默认的构造方法
成员变量赋值1.setXxx()2.带参构造方法
练习1:标准学生类的代码写法和测试
类{成员变量
构造方法(无参构造方法
带参构造方法)
成员方法 getXxxx()
setXxx()
给成员变量赋值的方法
无参构造方法+setXxxx()
带参构造方法}
private String name;
private int age;
public Student() {}
public Student(String name,int age) {
this.age=age;
this.name=name;
}
public void setAge(int age) {
this.age=age;
}
public void setName(String name) {
this.name=name;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
使用
Student s=new Student();
s.setName("linda");
s.setAge(26);
System.out.println(s.getName()+"-----------"+s.getAge());
Student s1=new Student();//public Student() {}
System.out.println(s1.getName()+"-----------"+s1.getAge());
Student s2=new Student("李梅",28);//public Student(String name,int age) {}
System.out.println(s2.getName()+"-----------"+s2.getAge());
}
类名作为形势参数 :其实这里需要传递该类的对象
类名作为返回值:返回的是类的对象