20190729——类和对象(一)、全局变量、局部变量、构造函数、方法重载、this的使用、面向对象

  • Post author:
  • Post category:其他

一、tips
1、方法重载:参数个数、参数类型、参数顺序

二、知识点
2.类和对象
类:现实中是由具有相同属性和行为的一类对象总称
对象:看得见摸得着的实体 ( 水杯,猫,狗)
行为: 动态内容 跑,跳,吃,喝
特征: 静态内容 颜色, 品种 , 名字

通过类的概念来确定对象
通过对象总结出来的类

类分为父类和子类,父类的相同属性和行为少,而子类的相同的属性和行为多,我们称之为父类更抽象,子类更具体

在JAVA程序中,class(类)用于规定对象拥有的属性和行为
对象的属性型在类中以变量的方式表现出来
对象的行为在类中以方法的方式表现出来

类的定义类名称一定要首字母大写,类的属性前两个字母一定要小写

定义类完毕后定义对象
定义对象的语法:
类名 对象名 = new 类名();
一定要明确的知道,自己定义的是哪个类的对象
定义对象名称的时候,千万不要随心所欲的起名称,一定要见名知义,通过对象的名称就知道对象的类型,一般定义对象名称的规则就是类名首字母小写

使用对象的步骤:1:定义对象 2:为对象的属性赋值 3:调用对象的方法
//定义对象
//类名 对象名 = new 类名();
Dog dog = new Dog();

	//使用对象
	//通过对象名.属性或对象名.方法()实现对象的使用
	//1先为对象的属性赋值
	dog.setColor("黄色");
	dog.setName("小黑");
	dog.setType("黑背");
	
	//2:为对象的属性赋值以后,才可以调用对象的方法 
	dog.showInfo();

类也是一个数据类型,本质上和int,double,char是一样的 ,(用户自己定义数据类型)
那么对象其实也是一个变量
Int num;
Dog dog;

1: 深入学习数据类型
1.1 数据类型一共分为两个大类: 基本数据类型,引用数据类型
基本数据类型:8个基本数据类型(int ,double,char,boolean ,float,short,byte ,long)
引用数据类型:String,数组 ,自定义类,Scanner ,接口,枚举

1.2引用数据类型定义变量和基本数据类型定义变量最大的区别(排除String)在于
基本数据类型定义的变量是可以直接使用的(int num = 23;double price = 2.5;
boolean isHave = true;)他在内存中只占用了一个空间

引用数据类型定义的变量是不可以直接使用的,是需要使用new命令为变量开辟空间,然后在新开辟的空间中保存值(引用数据类型变量在内存中占用了2个空间)
(Scanner input ; int[] nums; Dog dog ; 以上三个变量不能直接使用,必须通过开辟空间的命名先为对象开辟空间通过new 命令开辟对应的空间信息 input = new Scanner(System.in) ,nums= new int[3]; dog = new Dog() )

1.3 在方法中基本数据类型的参数和引用数据类型的参数的区别(排除String)
(方法参数值传递和引用(地址)传递的区别)
在方法中,如果对基本数据类型的参数的值发生变化,不会影响实参的值
在方法中,如果对引用数据类型的参数的值发生改变,则实参的值也跟着变化。

如果在方法中,对引用数据类型的形参重新开辟了空间,则方法中对形参的值作出的任意修改不会影响到实参的结果

阅读以下代码,分析输出结果
Dog dog1 =new Dog();
dog1.age = 20;
Dog dog2 = new Dog();
dog2.age = 30;
Dog dog3 = new Dog();
dog3.age = 40;

	Dog dog4 = dog2;
	dog4.age = 10;

	List<Dog> dogList = new ArrayList<Dog>();
	dogList.add(dog1);
	dogList.add(dog2);
	dogList.add(dog3);
	dogList.add(dog4);
	
	Dog dog5 = dogList.get(3);
	dog5.age = 60;
	
	System.out.println("dog1.age:" + dog1.age);
	System.out.println("dog2.age:" + dog2.age);
	System.out.println("dog3.age:" + dog3.age);
	System.out.println("dog4.age:" + dog4.age);
	System.out.println("dog5.age:" + dog5.age);
	System.out.println("程序结束");
  1. 全局变量和局部变量
    在类中中定义的属性(变量),就是全局变量,全局变量是由默认值,可以不赋值而直接使用
    int 默认值是 0
    String 默认值是 null
    引用数据类型的变量默认值都是null

局部变量:定义在方法中的变量,循环中的变量,判断中的变量都是局部变量,局部变量没有默认值,必须先赋值才能使用
如果全局变量和局部变量同名,则局部变量的优先级高于全局变量
如果想要在存在同名局部变量的方法中使用全局变量,则需要通过this.来区分全局变量和局部变量
public int age; //全局变量
public void vabtest(){
int temp =20;
//name,age,为属性(又称之为全局变量,存在默认值)
System.out.println(“name:” + name);
System.out.println(“age:” + age);
System.out.println(“temp:” + temp); //temp作为局部变量,必须赋值才能使用
//如果全局变量和局部变量同名,则局部变量的优先级高于全局变量
int age =20;
System.out.println(“age:” + age);
//如果想要在存在同名局部变量的方法中使用全局变量,则需要通过this.来区分全局变量和局部变量
System.out.println(“局部age: ” + age +”,全局age:”+this.age);
}

  1. 类中的构造函数
    构造函数:方法名和类名相同,没有返回值的类型这个的方法就是构造函数

构造函数的调用是通过new 关键字来调用的
Dog dog = new Dog();
构造函数作用用于为对象分配空间,并初始化对象的属性

当定义一个类的时候,如果这个类中没有定义构造函数,则系统会为该类提供一个默认的无参数的构造函数。如果自己在类中定义了一个带参数的构造函数,则系统的默认无参数构造函数就不会提供,那么创建对象的时候,就不能使用无参数的构造函数了

构造函数也是可以重载的。

5.方法的重载
在同一类中,方法名相同,参数列表不同(参数的个数不同,参数的类型不同,参数的顺序不同) 这是多个方法之间形成方法重载
//通过方法定义小狗的行为
public void eat(){
System.out.println(“小狗再吃”);
}
//方法重载
public void eat(String food) throws Exception{
System.out.println(“小狗在吃:” + food);
}
//个数不同
void eat(String food,String space){
System.out.println(“小狗在”+space+”,地方 吃”+ food);
}
//参数的类型不同
public int eat(int num ,String food){
System.out.println(“小狗吃了 :”+ num +”份 “+ food);
return 20;
}
//参数的顺序不同也是方法重载
public void eat(String food,int num){
System.out.println(“小狗吃了 :”+ num +”份 “+ food);
}

方法重载和方法返回值没有关系
方法重载和方法的访问修饰符也没有关系
方法重载和方法是否有有异常声明也没有关系
方法重载和方法的参数名称也没有关系
//方法重载
public void eat(String food) throws Exception{
System.out.println(“小狗在吃:” + food);
}
/方法重载和方法的参数名称没有关系,编译器认为这两个方法是同一个
public void eat(String chide){
}
/

方法重载的好处
开发人员可以减少方法名称的定义,调用人员可以减少方法名称的记忆。
方法重载可以带来一定的多态效果(调用同样的方法会产生不同的结果)

6.在类中this 的使用
this 当前对象
如何确定当前对象:那个对象调用方法,this就是那个对象
//通过方法定义小狗的行为
public void eat(){
System.out.println(this.name+ “小狗再吃”);
this.showInfo();
}
//让二个小狗分别调用吃的方法
dog1.eat();
dog2.eat();
方法中的this就分别代表了dog1和dog2

使用this 可以调用类中的属性和方法
public void eat(){
System.out.println(this.name+ “小狗再吃”);
this.showInfo();
}
使用this可以调用当前类的构造函数
使用this() 表示调用本类的另一个构造方法,该命令只能出现在构造方法的第一句话中

7.面对对象的特征
7.1.oop三大特征
抽象:定义类,定义属性,定义方法的过程(抓取主要信息,忽略次要信息的过程)
封装:在代码中隐藏实现了过程,提供对外的功能
继承:在继承中必须有父类和子类
父类:公共的属性和公共的行为比较少的类,父类是抽象的
子类:公共的属性和公共的行为比较多的类,子类要比父类更具体
牛 为父类( 四蹄子,比较大, 哞哞叫 )
水牛 为子类(除了牛类的共有特征以为,一天泡在水里)
多态
7.2.继承的实现
在JAVA中,通过extends 实现子类对父类的继承
当子类继承了父类以后,子类就会拥有父类的一些属性和行为(不是全部)
(公有的属性和公有的方法)

如果在子类中调用父类的构造函数,就需要使用super()实现调用父类的构造函数调用,且super() 必须出现在子类构造函数的第一句话
在创建子类对象的时候,首先要调用父类的构造函数,然后才能执行子类自己的构造函数,如果在子类构造函数中使用了super()显示的调用了父类指定的构造函数,则父类无参数的构造函数不会执行,如果子类构造函数中没有显示调用父类的构造函数,则默认执行父类无参数的构造函数


版权声明:本文为NYX_UNI原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。