一、类的语法格式
访问修饰符 class 类名 { 属性、特征 方法、行为 }
1、类名首字母大写!
2、类是对一组具有相同特征和行为的事物的抽象!
二、类和对象的区别
1、类是抽象的,而对象是具体的。
2、类的范围更广。
3、类是对象的模板,对象是类的实例。
4、万事万物皆对象。
public class Person { //特征,就是属性(成员变量),用来描述一个类中的信息 String name; //姓名 String gender;//性别 int age; //年龄 double height;//身高 //行为、方法 public void eat() { System.out.println("人在吃东西。"); } public void sleep() { System.out.println("人在睡觉觉。"); } //自我介绍 public void introduce() { System.out.println("姓名:" + name + "性别:" + gender + "身高:" + height + "年龄:" + age); }
三、创建对象
类名 对象名 = new 构造方法;
1、new关键字是用来创建对象的,对象本身存在于堆区
2、person是变量名,也可以认为是对象名,存在于栈区
3、person存储的是对象在堆区的地址,所以操作person就相当于操作对象本身
注:只要是new出来的对象,哪怕内部属性一致,他们在堆区的地址也不一样!!!
Person person = new Person(); person.name = "花花"; person.gender = "男"; person.age = 18; person.height = 180.0; Person person1 = new Person(); person1.name = "小小"; person1.gender = "男"; person1.age = 18; person1.height = 180.0; System.out.println(person); System.out.println(person1); //类中对象方法的调用方法:对象名.方法 person.introduce(); //创建一个学生对象 Student student = new Student(); student.setName("三叔"); System.out.println(student.getName());
四、static关键字
1、static修饰属性:static修饰属性,则改属性称为类属性。
那么类属性与对象属性的区别是什么呢?
1>别名:对象属性、成员变量、非静态变量
类属性、静态成员变量、静态变量
2>声明周期:
对象属性随着对象的创建而生成,对象销毁则销毁
类属性随着类的加载而生成,jvm虚拟机终止或者程序退出
类销毁时随之销毁。
3>存储位置:
对象属性属于对象所在堆区,而类属性属于类所在属于数据共享区
4>访问方式:
对象属性只能由对象去访问,而类属性既可以由类直接访问,
也可以由对象访问,但是建议采用类访问。
static int count; private String brand; public void setBrand(String brand){ this.brand = brand; } public String getBrand() { return brand; }
2、static修饰方法:
1>调用时可以使用类名,也可以使用对象,但是推荐使用
类名!而对象方法,只能由对象调用!
2>类方法中只能直接访问类属性(static),不能直接访问
对象属性,而对象方法中,都可以直接访问!想要在类方法中,访问对象
属性,必须先创建对象,由对象访问
3>静态方法中,只能直接调用静态方法,想要调用非静态方法,
先创建对象,再由对象调用非静态方法。而非静态方法中
既可以直接调用静态方法,也可以直接调用非静态方法!
public static void staticMethod() { System.out.println("我是一个静态方法,也叫类方法"); // System.out.println(count); // System.out.println(brand); } public void nonStaticMethod() { System.out.println("我是一个非静态方法,也叫对象方法"); System.out.println(count); System.out.println(brand); }
五、构造方法用来创建对象
构造方法的名称与类名一致,且没有返回值,不是代表要写void,而是直接省略返回值的部分!!!
1、一个类内部如果没有手动书写构造方法,那么系统
默认会为此类提供一个无参数的构造方法
2、当手动书写了有参构造方法,那么无参的就不会默认
提供了,就需要我们手动将无参构造方法声明出来!!!
public Car() { } public Car(String brand) { // this.brand = brand; setBrand(brand); }
六、局部变量与成员变量(属性)的区别?
1、从定义位置区分:
属性定义在类的内部,而局部变量定义在方法内部
2、从作用范围区分:
属性作用于整个类,而局部变量作用于声明此变量的方法内部
3、从初值区分:
属性默认有初值,引用类型为null,整数为0,浮点数为0.0
而局部变量没有默认值,使用时必须保证有初值
4、从生命周期区分:
属性随着对象的创建而生成,随着对象的回收而销毁
而局部变量随着方法的调用而生成,随着方法结束而销毁
5、当一个方法中的局部变量与属性重名时,局部变量的优先级更高
6、不同的方法中可以保存在同名的局部变量
public class Student { /* 属性的访问修饰符有四种: public公开的,protected受保护的,缺省,private私有 为了满足javaBean的设计规范采用private 将类的内部实现细节进行隐藏,不允许外界直接访问 达到了封装的目的 */ /* this 关键字只能出现在对象方法中 this 代表的是调用当前方法的对象!!! */ private String name; private int age; /*属性私有,但是还是需要进行赋值、取值 赋值我们称之为setter方法,完成对私有属性的赋值 取值我们称之为getter方法,完成对私有属性的取值 */ /* setter方法赋值,为私有属性赋值是 有参无返的方法 并且方法要对外使用,所有访问修饰符为public 赋值不需要返回值,所以返回值为void 方法名:set + 属性名首字母变大写 参数类型要与属性类型一致,并且参数名与属性名一致 */ public void setName(String name) { this.name = name; } /* getter方法取值 无参有返的方法 并且方法要对外使用,所有访问修饰符为public 取值需要得到属性的值,所以返回值为获取的私有属性的类型 方法名:get + 属性名首字母变大写 */ public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; }