类与对象
#1.什么是面向对象
答:任何事务都可以被叫做对象,拥有自己的属性。把一个整体事务分成不同的对象,让每个对象去解决各自的属性和方法。
2.什么是面向过程:
面向过程是指一个整体的事务需要一步步完成,比如洗衣服的流程,先做什么在做什么。
3.什么类
(1)类是一种抽象的概率,具有相同的共同属性和行为功能的对象的抽象集合,类是对象的数据类型。对象是类的实例化结果。具体来说就是类是一个动物不同人的种类,对象是能摸的到真实存在的实体,例如狗,猫,它们有相同的属性,但是又有各自的区别。
类的组成:
(1)属性:类中用成员变量实现的
public class Animal{
int age;//共同属性,成员变量
}
(2)行为:类中是通过方法实现的
public class Animal{
public void eat(){//成员方法
System.out.println("所有动物都有吃这一行为");
}
}
对象的使用
创建对象:类名 对象名 = new 类名();
类名 对象名=null; 对象名 =new 类名();//用来分析地址和空间的变化。
public class Animal{
public static void mian(String[] args){
Animai cat =new Animai();//创建对象
/*创建方式二:
Animail cat =null 创建一个栈地址
cat =new Animal() 使用new创建一个堆空间,用栈地址指向堆空间
*/
cat.age=18;//使用类的属性
System.out.println(cat.age);
cat.eat();//使用类的方法
}
}
public class Students{
string name;
int age;
public void study(){
System.out.println("好好学习");
}
}
单个对象和对个对象
Person p1 =new Person();
person p2 = new Person();
Person p3;
Person p4;
p3=p1;//地址指向的问题,等号右边赋值给左边
使用new则创建了一个堆空间,可以存储数据,不同的new则不同的堆空间,而Person p 相当于一个地址,利用p地址就可以访问空间数据,并进行赋值和修改。
成员变量和局部变量
成员变量:类中方法外面的变量,在类方法外面或者方法形参上,内存在堆内存,随着对象的存在而存在,有默认初始值
局部变量:类方法中,栈内存上,随着方法的调用而存在,没有默认初始值,必须要定义,才能使用。
封装
为什要封装?
答:通过测试类创建类的对象,可以调其他类中的属性(变量名),然而测试类中可以对其他类任意赋值,封装目的是将某个类特殊属性进行private(私有化),只能提供特殊的方法才可以调用和修改赋值。并且可以设置对其值修改的条件,在测试类输入错误值就不能正常运行。
封装原则:封装是面对对象的三大特征之一,是将某些信息隐藏在类内部,不允许外届程序直接访问,需通过特点方法进行调用。
#关键字
(1)private :权限修饰符,修饰成员变量和成员方法,主要特点是只允许本类才可以访问。
——使用private 修饰方法和变量的方法
【1】 public get变量名()
public void setAge(int a){
//age=a;
//this age =age ;形参中变量是age可以用this方法,后续讲到this
if(a<0 || a>20 ){
System.out.println("你给的值有误");
}else
{
age=a;
}//本方法限制条件就是封装的目的所在
}
【2】 public set变量名(参数)
public int getAge(){
return age ;
}
//调用此方法就可以获得age值
#this
this 修饰符变量是指代成员变量,需要与成员同名才可以使用。方法体中形参和成员变量同名,用this.age是指形参中age.
要点:this是解决局部变量隐藏成员变量
方法被那个对象所调用,this就代表那个对象,this就代表那个对象的栈地址。 不同的new就是不同的堆空间,不同对象中的this就是不同的栈地址。
public void setAge(int age){
//this age = age;
构造方法
构造方法是一种特殊的方法,主要是创建对象的和完成对象的初始化。无参构造方法默认存在,建议书写一遍
public calss Student{//
public Student(){//构造方法和类名同名
System.out.println("无参数构造方法")
//这里面写方法体,什么也不写也行。
}
public Student(int age){//带参构造方法//可以方法重载,一个方法中只要参数名,排序顺序,类型不同就是不同的方法
this age = age;
System.out.println(age);
}
//测试类
pubic class PersonDemo{
public static void main(Sting[] args){
Student p= per Student();//调用无参构造方法
Student p= per Student(30);//调用有参构造方法
}
}
总结:封装函数的标准
public class Person{
private int age;
private String name; //private私有化
public Person(){
//无参构造方法
}
public Person(int age,String name ){//有参构造方法
this.age = age;
this.name = name;
}
public void setAge(int age ){//对类中私有变量赋值
this.age = age;
}
public int getAge( ){//读取类中私有变量赋值
return age;
}
public void eat(){//类中的行为(方法)
System.out.println("需要吃");
}
}
//测试类
public calss test{
public static void main(String [] args){
//无参构造方法
Person p = new Person();
p.setAge(18)//赋值
p.getAge();
p.eat();
//方式二,有参构造方法
Person s = new Person(18,“张三“”);
s.eat();
}
}