理解类和对象
在了解类于对象之前首先来看一下生活中的类与对象吧。
生活中的对象
我们身边的所有物体都可以称之为对象,万物皆对象
在描述生活中的对象时通常会描述其特征和行为
- 特征:就是其自身的属性,比如‘人’对象的属性就包括:姓名、身高、年龄等
- 行为:就是对象的所执行的操作,或者对象可以做的事。
生活中的类
我们在看到对象的同时会下意识的进行划分种类,比如我看见一只猫的‘对象’,我会把它分到‘哺乳动物类’,看见玩具会分类为‘玩具类’
类是一个抽象的概念,它是从一群对象中抽取共性的特征和行为产生的一个概念。不能拿某个对象来代表某个类别,因为对象只是类的一个个体。
- 生活中类和对象的关系:类是一个模板,对象是类的一个个体,是根据类这个模板而产生的个体。
程序中的类与对象
Java以类(引用数据类型)为基本单位,被class修饰的。
- 引用数据类型:数组、类、接口、枚举等…
程序中的类和对象都是从现实生活中抽象而成的,你在现实如何描述它们,程序中也是。
在了解了生活中和程序中类和对象的概念,就来了解一下如何创建类和对象吧。
类的创建方式以及属性和方法的创建。
//举例创建一个学生类,其中包括学生类的属性和方法(方法和属性不是必须同时存在的可以只存在其中一种)
public class Student(遵循大驼峰命名规则){
//1.此类的属性(成员变量/字段)
//public:访问修饰符
//String、int、char:返回值类型
//name、age、gender:属性名
public String name;
public int age;
public char gender;
// 创建自我介绍的方法
//修饰符 返回值类型 方法名(括号内为参数列表,为什么称为列表因为可能不会只有一种数据类型的存在)
public void showInfo(){
syso("我的姓名"+name+"我的性别"+gender+"我的年龄"+age);
}
}
那么创建了一个类以后我们发现是无法直接运行的,这是因为类只算是一个模板,而运行它还需要去创建对象来实现。
对象的创建方式
- 语法:类名 对象名 = new 类名();
- Student stu = new Student();
创建了对象后就可以调用之前定义的类中的属性和方法了
调用属性:
对象名.属性名 = xxx,//赋值
stu.name = “小明”;
调用方法:
对象名.方法名();
方法创建方式
方法:是功能,或一系列代码的聚合,可以理解为一个魔术箱。
基本语法:
//访问修饰符 返回值类型 方法名(参数列表)
public void(void表示没有返回值) showInfo(){
syso();
}
上面的方法为没有返回值的创建方式
在了解了基本的类创建以及属性和方法的创建后来继续了解一下方法的参数语法和返回值语法
如果创建的方法的返回值类型不为void,那么必须加上ruturn关键词
ruturn结束当前方法 返回到方法调用者二点位置
方法的分类
方法分4类1.无参无返类,2.有参无返类,3.有返无参类,4.有返有参类。
有反无参类型
public String stu(){
String s = xxxxxx返回字符串类型的值。
return s;
// 返回值类型只能设置一种,并且必须上下呼应,并且在return关键字后再创建数据会报错。
}
有反有参类型(参数之间用豆号分隔)
public String showInfo(String name,int age,int score){
String info = "姓名"+name+"年龄"+age+"分数"+score;
return info;
}
*****在调用有反回值类型的方法时必须要用同数据类型来接收
//例学生类
// 创建对象
Student stu = new Student();
// 接收带反回值的方法
String s = stu.showInfo();
方法的形参和实参
形参:时指在定义方法时,用于指定该方法需要传递的参数类型。
实参:时指在调用方法时,实际传递的参数值。
(形参和实参的顺序必须对应,形参第一个参数类型为int,那么实参的第一个参数类型也必须为int)
方法参数数据类型的区别
在前面我们也介绍过了,Java中存在两种数据类型
- 1.基本数据类型
- 2.引用数据类型
那么这两种数据类型在参数列表传输时有什么区别呢?
基本数据类型
基本数据类型作为参数值时传输的值是值的内容,在来到了另一个空间的方法后,这个值和之前没有关系
引用数据类型
引用数据类型作为参数值时传输的值是对象在堆中的地址值,所有两个内容是指向了同一块空间,是相互影响的。
构造方法
构造方法其实以前一直在使用但是从未正视过的特别方法
其实Student()也是一个方法。它的功能就是用来创建Student对象。但是我们并没有写过这个方法,那是因为系统默认提供了一个无参构造,当然它也可以有参数。
// 无参构造方法
public class Student {
private String name;
private int score;
public Student() {
}
// 带参构造方法
public Student(String username,int scores){
name = username;
score = scores;
}
构造方法的使用
构造方法的注意事项:
1.于类同名,不含返回类型,如果类中没有无参的构造方法,系统会默认给出无参构造方法。
2.构造方法一般都是public的,才能被系统使用。
3.无参构造在给对象属性赋值的时候比较麻烦,带参构造方法会令对象的创建更加方便。
4.构造方法经常用于程序初始化工作,举例:人出生要”洗澡“,就可以在人的构造方法时加入完成”洗澡“的程序代码,程序就不必每个人出时一个一个地告诉它们要”洗澡“了。
5.当类有了带参构造方法后,系统不再自动生成默认的无参构造方法,若使用需重新定义。
6.构造方法只能用于创建对象时,不能在程序中像调用其他方法一样调用它,但是可以用this()的形式在其他构造方法中调用它,注意this()必须在第一行。
this关键字
在编写带参构造方法的时候,我们要给构造方法的形参变量命名,如果将形参名成员变量名设为一致,并不会报错,但是Eclips提示了警告。而且执行测试之前的对象创建和打印学生信息,发现输出时全部为默认值!明明通过构造方法进行赋值,但是却没有输出值,这是因为Eclips在识别变量的时候采用了就近原则。
如果局部变量和成员变量同名,默认它会采用局部变量(就近原则),所以要用成员变量的时候需要加上this
成员变量和局部变量的区别
在类中定义的属性:成员变量
在方法中定义的属性:局部变量
-
作用域不同:
局部变量的作用域仅限于定义它的方法,随着方法运行而出现在栈中方法内,随着方法的弹栈而消失。
-
初始值不同:
Java会给成员变量一个初始值
Java不会给局部变量赋予初始值
-
在类中位置不同:
成员变量:在类中,方法外。
局部变量:在方法定义(方法体)中或者方法声明(参数)上。
-
在内存中的位置不同:
成员变量:在堆内存储。
成员变量:在栈内存储。
方法的重载
在同一类中,如果出现了方法名相同,参数列表不同的情况,就构成了方法重载
参数列表不同包含:
数据顺序不同
数据个数不同
数据类型不同