面向对象
面向谁,就是更多的关注谁,比如:面向高端消费者
面向过程:当你需要实现一个功能的时候,每一个具体的步骤都要亲力亲为,详细处理每一个细节。强调步骤
面向对象:当需要实现一个功能的时候,不关心具体步骤,而是找一个已经具有该功能的人,来帮我做事。他强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。
面向对象的特点:面向对象思想是一种更符合我们思考习惯的思想,他可以将复杂的事情简单化,并将我们从执行者变成了指挥者。
面向对象的语言中,包含了三大基本特征,即封装,继承,和多态。
类和对象
类:类是一组相关属性和行为的集合,可以看成是一类事物的模板,使用事物的属性特性和行为特征来描述该类事物。 (模拟一类现实事物)
属性:就是该事物的状态信息
行为:就是该事物能做什么
对象对象是一类事物的具体体现,是类的一个实例,必然具备该事物的属性和行为。
类和对象的关系:
类是一类事物的描述,是抽象的
对象是一类事物的实例,是具体的
类是对象的模板,对象是类的实例。
比如:
类:小猫
属性:名字, 颜色,年龄
行为:跑,叫
对象:我家的猫
属性:喵喵,黑色,1岁
行为:慢悠悠的跑,喵喵叫
类的定义
java中class里的成员变量对应事物的属性,成员方法对应事物的行为
类的定义格式:
public class ClassNme{
成员变量;
成员方法;
}
成员方法不写static关键字。
//定义一个学生类
public class Student{
String name;//成员变量
int age;
public void study{ //成员方法
study;
}
public void eat{
eat;
}
}
对象的创建和使用:
通常情况下,一个类不能直接使用,需要根据类创建一个对象才能使用。
导包:指出需要的类,在什么位置
import 包名称:类名称
创建:
类名称 对象名 = new 类名称()
使用:
对象名.成员变量名
对象名.成员方法名(参数)
如果使用的类,和自己在同一个包下,可以省略导包语句。
Student stu = new Student();
stu.name = "张杰";
stu.eat;
如果成员变量没有赋值,那么将会有一个默认值,规则和数组一样。
使用对象作为方法的参数
Student stu = new Student();
stu.name = "张杰";
stu.age = 18;
method (stu);//调用方法 张杰 18
public static void method(Student param){
System.out.println(param.name)
System.out.println(param.age)
}
使用对象作为方法的返回值
Student stu1 = getStudent();
System.out.println(stu1.name);//张杰
System.out.println(stu1.age);//18
public static Studen getStudent(){
Student stu = new Phone();
one.name = "张杰";
one.age = 18;
return stu;
}
成员变量和局部变量的区别
- 定义的位置不一样:局部变量在方法的内部,成员变量在方法的外部,直接写在类中。
- 作用范围不一样:局部变量只有方法当中才可以使用,出了方法就不能再用。成员变量整个类全部可以使用。
- 默认值不一样:局部变量没有默认值,想要使用必须手动赋值,成员变量如果没有赋值,会有默认值,规则和数组一样。
- 内存的位置不一样:局部变量位于栈内存,成员变量位于堆内存。
- 生命周期不一样:局部变量随着方法进栈而诞生,随着方法出栈而消失,成员变量随着对象创建而诞生,随着对象被垃圾回收(这个对象再也不用了,JVM可能在合适的时机把这块内存清掉)而消失。
封装性
封装性:将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。(将细节隐藏起来,对外界不可见)
方法就是一种封装,关键字private也是一种封装
private关键字
private代表私有化,被修饰后的成员变量和成员方法,只有在本类中才能访问。可以提高代码的安全性
外部的类想要访问,需要通过get/set方法
set方法:向成员变量设置数据
get方法:获取成员变量数据
get:不能有参数,返回值类型和成员变量对应。
set:不能有返回值,参数类型和成员变量对应。
对于基本类型中的boolean值,get方法一定要写成isxxx,set不变。
public class Student{//定义一个学生类
String name;
Private int age;
public void show (){
System.out.println("我叫:" + name "年龄:" + age);
}
public void setAge(int num){
if(number <100 && number>0){
age = num;
}else{
System.out.println("数据不合理");
}//阻止不合理的数据被设置进来,提到了代码的安全性
public int getAge(){
return age;
}
}
}
//使用
Student stu = new Student();
stu.setAge(18);
System.out.println("年龄:" + stu.getAge);
this关键字
当方法的局部变量和类的成员变量重名时候,根据就近原则,优先使用局部变量
如果需要访问类当中的成员变量,需要使用this关键字
//定义一个学生类
public class Student{
String name;//我的名字
}
public void sayHello(String name){
System.out.println(name + "你好,我是" + this.name);//参数name是对方的名字
}
//定义一个Studen对象
Student stu = new Student();
stu.name = "爸爸"//设置自己的名字是爸爸
stu.sayHellow("儿子")//把参数对方的名字:儿子传递到方法中 打印结果为:儿子,你好,我是爸爸
方法被哪个对象调用,方法中的this就代表那个对象。(stu调用了sayHello方法,所以this.name是stu的名字 : 爸爸)
构造方法
构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法。
构造方法的名称必须和类名称完全一样,大小写也要一样
构造方法不要写返回值类型,连void都不写。
构造方法不能return一个具体的返回值
如果没有编写构造方法,那么编译器会赠送一个构造方法,没有参数,方法体什么都不做。
构造方法也可以重载(有参构造方法,无参构造方法)
//定义一个学生类
public class Student{
private String name;
private int age;
public Student(){//无参构造方法
}
public Student(string name, int age){//全参构造方法
this.name = name;
this.age = age;
}
}
//定义一个Studen对象
Student stu = new Student();//调用无参构造方法(构造方法的调用格式是new )
Student stu = new Student(张杰,18);//调用全参构造犯法
如果修改对象当中的内容,还是需要set 方法
标准的类
一个标准的类需要四个部分组成
所有成员变量都要使用private修饰
为每一个成员变量编写一对get,set方法
编写一个无参构造方法
编写一个全参构造方法
这样标准额类也叫做Java Bean
//定义一个学生类
public class Student{
private String name;
private int age;
public void setName(String name){
this.name = name;
}
public void getName(String name){
return name;
}
public void setAge(int age){
this.age = age;
}
public void getAge(int age){
return age;
}
public Student(){//无参构造方法
}
public Student(string name, int age){//全参构造方法
this.name = name;
this.age = age;