类和对象
1.类和对象初步认识
【面向对象概念】
1.面向对象是思考问题的一种思考方式,是一种思想。
2.类就是一类对象的统称。对象就是这一类具体化的一个实例。
3.面向对象的好处:将复杂的事情变简单了,只要面对一个对象就行。
【面向对象设计】
面向对象设计把握一个重要的经验:谁拥有数据,谁对外提供操作这些数据(私有)的方法。(被动的一方是数据的拥有者,主动的一方是执行者)
开发时:找对象,建对象,用对象,并维护对象之间的关系。
简而言之
面向对象就是用代码(类)来描述客观世界的事物的一种方式,一个类主要包含一个事物的属性和行为。
2.类和类的实例化
1.类就是一类对象的统称。对象就是这一类具体化的一个实例。
2.一个模板可以实例化无数个对象。
3.一个类,可以创建无数个对象。
4.类在Java中属于引用类型。
基本语法
//创建类
class 类名{
field;//成员属性
method;//成员方法
}
//实例化对象
类名 对象名 = new 类名();
class为定义类的关键字,类中的元素称为:成员属性。类中的函数称为:成员方法。
代码示例:
class Person {
public String name;//成员属性(实例变量)
public String sex;
public int age;
public void eat() {//成员方法
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
}
public static void main(String[] args) {
Person person = new Person();//通过new来实例化对象
person.eat();
person.sleep();//通过对象来调用方法
//可以实例化很多类
Person person1 = new Person();
Person person2 = new Person();
}
//打印结果
吃饭
睡觉
3.类的成员
3.1字段/属性/成员变量
默认值规则:
1.对于各种数字类型,默认值为0。
2.对于布尔类型,默认值为false。
3.对于引用类型,默认值为null。
代码示例:
class Person {
public String name;
public int age;
}
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.age);
System.out.println(person.name);
}
//打印结果
0
null
字段就地初始化
直接给定初始值
public class Person {
public String name = "java";
public int age = 10;
}
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.age);
System.out.println(person.name);
}
//打印结果
10
java
3.2方法(method)
用来描述一个对象的行为
代码示例:
public class Person {
public String name = "java";
public int age = 10;
public void show() {
System.out.println("我叫"+name+",今年"+age+"岁");
}
}
public static void main(String[] args) {
Person person = new Person();
person.show();
}
//打印结果
我叫java,今年10岁
3.3static修饰
(1)修饰属性同一个类的不同实例共用一个静态属性。被static修饰,属于类,不属于对象。
代码示例:
public class Person{
public int age;
public static int count;
}
public static void main(String[] args) {
Person person = new Person();
person.age++;
Person.count++;
System.out.println(person.age);
System.out.println(Person.count);
System.out.println("=============");
Person person1 = new Person();
person1.age++;
Person.count++;
System.out.println(person1.age);
System.out.println(Person.count);
}
//打印结果
1
1
=============
1
2
**(2)**修饰方法
被static修饰的方法叫做静态方法
静态方法属于类,而不属于类的对象。
可以直接调用静态方法,而无需创建对象。
静态方法可以访问静态数据成员,并不可以更改静态数据成员的值。
public class Person{
public int age;
public static int count;
public static void show() {
count = 10;
//age = 0;不可访问非静态成员变量
}
}
public static void main(String[] args){
Person.show();//无需创建,直接调用
System.out.println(Person.count);
}
//打印结果
10
3.4小结
代码示例:
public class Person {
public String name;//实例变量
public int age;//实例变量 存放在对象中
public static int count;//静态变量,编译时已经产生,属于类本身,且只有一份,存放在方法区
public final int SIZE = 10;//常量,属于对象,被final修饰,后续不可修改
public static final int COUNT = 100;//静态常量,属于类本身,被final修饰,后续不可修改
//实例成员方法
public void eat() {
int a = 1;//局部变量
System.out.println("吃饭");
}
//实例成员方法
public void sleep() {
System.out.println("睡觉");
}
//静态方法
public static void func() {
System.out.println("静态方法");
}
}
public static void main(String[] args) {
//创建对象
Person person = new Person();
System.out.println(person.age);
System.out.println(person.name);
System.out.println("===========");
System.out.println(Person.count);
System.out.println(Person.COUNT);
System.out.println("===========");
Person.func();
person.eat();
person.sleep();
}
//打印结果
0
null
===========
0
100
===========
静态方法
吃饭
睡觉
4.封装
4.1private实现封装
被public修饰的成员变量或者成员方法,可以直接被类的调用者调用;
被private修饰的成员变量或者成员方法,不能被类的调用者调用。
代码示例:使用private封装属性,提供public方法供类的调用者使用
public class Person {
private String name = "李四";
private int age = 10;
public void show() {
System.out.println(name+"今年"+age+"岁");
}
}
public static void main(String[] args) {
Person person = new Person();
person.show();
}
//打印结果
李四今年10岁
4.2get和set方法
set方法表示设置这个变量的值;
get方法表示得到这个变量的值。
代码示例:
public class Person {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) {
Person person = new Person();
person.setAge(10);
person.setName("曹操");
System.out.println(person.getAge()+","+person.getName());
}
//打印结果
10,曹操
5.构造方法
5.1基本语法
构造方法是一种特殊方法, 使用关键字new实例化新对象时会被自动调用, 用于完成初始化操作.
new执行过程
为对象分配内存空间
调用对象的构造方法
语法规则
1.方法名称必须与类名称相同
2.构造方法没有返回值类型声明
3.每个类中一定至少存在一个构造方法,如果没有明确定义,系统会自动生成一个无惨构造
代码示例:
public class Person {
private String name;
private int age;
//默认构造方法
public Person() {
this.name = "貂蝉";
this.age = 24;
}
//带有参数的构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void show() {
System.out.println(name+","+age);
}
}
public static void main(String[] args) {
Person person = new Person();//调用不带参数的构造方法
person.show();
Person person1 = new Person("曹操",25);//调用带参数的构造方法
person1.show();
}
//打印结果
貂蝉,24
曹操,25
5.2this关键字
this表示当前对象引用(注意不是当前对象). 可以借助 this 来访问对象的字段和方法。
5.3toString方法
代码示例:
public class Person {
private String name;
private int age;
//默认构造方法
public Person() {
this.name = "貂蝉";
this.age = 24;
}
//带有参数的构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void show() {
System.out.println("name="+name+",age="+age);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public static void main(String[] args) {
Person person1 = new Person("曹操",25);
person1.show();
System.out.println(person1.toString());
}
//打印结果
name=曹操,age=25
Person{name='曹操', age=25}