前言:面向对象就是一种编程思想,只需要关注结果,不需要关注过程,需要大家在以后的学习和开发过程中慢慢领悟。
例如:我们需要把一头大象装进冰箱,按照面向对象来理解,只需要3步即可完成:1.打开冰箱门2.将大象装进冰箱3.关闭冰箱门。至于大象是如何装进冰箱的,我们不需关注,这就是面向对象。
一(类和对象的定义):
类:我们把一类具有共同的属性,特征,行为的事物归于一类,是抽象的:---->类(类别,类型)。
对象:是具体存在的,符合类的定义的一个事物.
例如:王者荣耀里面有很多游戏主播,游戏主播就是一个类,而且是抽象的;其中,游戏主播里面的张大仙,吕德华,耀阳等等游戏主播就是具体存在的对象。
二(类和对象的创建):
2.1 类的创建格式:
访问修饰符 class 类名{
成员变量(属性);
成员方法(行为);
}
注意:1.类名首字母需大写,如有多个单词,则每个单词的首字母均大写。如,Game,MyGame。
2.在一个java文件中,只能出现一个用public修饰class(不谈及内部类),否则会报错!!!
而且当前public修饰的class的类名与java文件名保持一致
2.2 编写类的属性(成员变量或成员属性):
格式:数据类型 属性名;
int id;
String name;
char sex;
如果没有对成员变量赋值那么:
如果成员变量是引用类型,则默认值为null
如果成员变量是基本类型数,则默认值为0
如果成员变量是boolean,则默认值为false
2.3 编写类的行为(成员方法或成员行为)
格式:访问修饰符 返回值类型 方法名(方法参数,有就写){
方法体
}
public void sayHello(int id,String name,char sex){
System.out.println("大家好,我的id是"+id+",姓名是"+name+",性别是"+sex);
}
2.4 通过类创建对象:
创建对象的格式:类名 对象名=new 类名();
Student stu=new Student();
通过对象调用成员变量/方法的格式: 对象名.成员变量
对象名.成员方法()
class Student{
int id;
String name;
char sex;
public void sayHello(){
System.out.println("大家好,我的id是"+id+",姓名是"+name+",性别是"+sex);
}
public static void main(String[] args) {
//创建student对象
Student stu=new Student();
//给对象的成员属性赋值
stu.id=001;
stu.name="张三";
stu.sex='男';
//通过对象调用sayHello方法
stu.sayHello();
}
}
2.5成员变量与局部变量
成员变量:类中定义的变量
局部变量:方法中定义的变量
位置方面:
成员变量在类中定义
局部变量在方法中定义
生命周期:
成员变量(随着对象的存在而存在,随着对象的消失而消失)
局部变量(随着方法的调用而存在,随着方法的结束而消失)
初始化方面:
成员变量(有默认初始化值的!)
如果成员变量是引用类型,则默认值为null
如果成员变量是基本类型数,则默认值为0
如果成员变量是boolean,则默认值为false
局部变量(没有默认初始化值的,必须要先定义,后初始化才可以使用)
三(构造方法/构造器/构造函数):
构造方法格式:
修饰词 类名(参数){
方法体
}
与普通方法的区别:
1.构造方法一定没有返回值(void不是没有返回值,只是返回值为null),普通方法的 返回值根据需求来确定
2.构造方法名必须与类同名,而普通方法的方法名可随意取
普通方法(加static的情况下)的调用:方法名(有参传参)
何时调用构造方法:创建对象的同时就会调用
构造方法的作用:创建对象的同时,初始化成员变量(即给对象属性赋值)
通过调用有参构造方法,可以直接在创建对象的同时初始化成员变量
package day08;
public class Friend {
//成员变量
String name;
int age;
char sex;
//构造方法
public Friend( String name,int age,char sex){
System.out.println("大家好,我朋友是"+name+",今年"+age+"岁,性别是"+sex);
}
public static void main(String[] args) {
//创建对象Friend的同时就会自动调用有参构造方法
Friend fr=new Friend("耀阳",26,'男');
}
}
无参构造器:就是没有参数的构造器
有参构造器:在创建对象时,通过参数,可以给属性指定可变得值
在创建类的实例时,若括号里面不写参数,则默认调用无参构造器
package day08;
public class Friend {
//成员变量
String name;
int age;
char sex;
//有参构造器
public Friend( String name,int age,char sex){
System.out.println("我是Friend的有参构造器");
System.out.println("大家好,我朋友是"+name+",今年"+age+"岁,性别是"+sex);
}
public Friend(){
System.out.println("我是Friend的无参构造器");
}
public static void main(String[] args) {
Friend fr=new Friend();
//Friend fr=new Friend("耀阳",26,'男');
}
}
package day08;
public class Friend {
//成员变量
String name;
int age;
char sex;
//有参构造器
public Friend( String name,int age,char sex){
System.out.println("我是Friend的有参构造器");
System.out.println("大家好,我朋友是"+name+",今年"+age+"岁,性别是"+sex);
}
public Friend(){
System.out.println("我是Friend的无参构造器");
}
public static void main(String[] args) {
//Friend fr=new Friend();
Friend fr=new Friend("耀阳",26,'男');
}
}
如果不手动添加构造器,编译器会默认自动添加一个无参构造器
如果手动添加了有参构造器之后,编译器就不会再给无参构造器了
建议:写个类的时候,即要写无参构造器,也要添加有参构造器
总结:1.构造器没有返回值(void不是没有返回值,只是返回值为null)
2.构造器的名称和类名一致
3.语法: 修饰符 类名(){代码块}
4.在创建类的实例时被自动调用
5.在创建类的实例时,若括号里面不写参数,则默认调用无参构造器
6.如果括号里面写了参数,则根据实际定义的去调用
7. 如果不手动添加构造器,编译器会默认自动添加一个无参构造器
8. 如果手动添加了有参构造器之后,编译器就不会再给无参构造器了
建议:写个类的时候,即要写无参构造器,也要添加有参构造器
9. 在写构造器参数时,如果参数名字和类得属性名相同时,要在属性名前面加this. 来区分 是属性还是参数
10. 一般建议: 在写构造器得参数名时,参数名要和属性名一样,然后通过this来标注属性 名
11.在构造器中可以使用this来调用构造器,但是必须注意,调用构造器的代码必须写在构 造器的第一行
12. 构造器可以重载(需注意重载的条件)