谁能横刀立马,唯我飞牛大将军!
本节主题:Java的类与对象
———————————————————————————————————————————————————————
类与对象的小铺垫
(1)C是面向过程的语言,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题;而Java是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
(2)面向过程: 1.把冰箱打开 2. 把大象放入 3. 冰箱关起来 面向对象: 打开冰箱,储存,关闭都是对冰箱的操作,是冰
箱的行为。冰箱就是一个对象,所以只要操作冰箱所具备的功能,都要定义在冰箱中
(3)类是什么?对象又是什么?
类就是一类对象的统称。对象就是这一类具体化的一个实例。
简单来说:类是模板,对象是由模板产生的一个实物
面向对象的好处:将复杂的事情变简单了,只要面对一个对象就行
———————————————————————————————————————————————————————
类的创建模块
(1) 声明一个类就是创建一个新的数据类型。
(2)在Java中,类属于引用类型,关键字是class
基本语法
// 创建类
class <class_name>{
field;//成员属性
method;//成员方法
}
// 实例化对象
<class_name> <对象名> = new <class_name>();
具体来看看
class Person {
public int age;//成员属性 实例变量
public String name;
public String sex;
public void eat() {//成员方法
System.out.println("吃饭!");
}
public void sleep() {
System.out.println("睡觉!");
}
}
public class main{
public static void main(String[] args) {
Person person = new Person();//通过new实例化对象
person.eat();//成员方法调用需要通过对象的引用调用
person.sleep();
//产生对象 实例化对象
Person person2 = new Person();
Person person3 = new Person();
}
}
———————————————————————————————————————————————————————
类的成员模块
其实类的成员包括很多:字段,方法,代码块,内部类和接口等。这里重点介绍前三个:
1 . 字段(又作:属性,成员变量)
特征:在类中,但是在方法外部定义的变量。
使用 . 访问对象的字段
class Person {
public String name = "张三"; //字段
public int age = 12;
}
class Test {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);
System.out.println(person.age);
}
}
如果一个对象的字段没有初始化的话, 那么会被设置一个默认的初值.
默认值规则
对于各种数字类型, 默认值为 0.
对于 boolean 类型, 默认值为 false.
对于引用类型(String, Array, 以及自定义类,默认值为null
注意:如果对null进行 . 操作就会引发异常,因为null是"空引用",类似于C语言中的空指针。
2 . 方法
用于描述一个对象的行为。
class Person {
public String name;
public int age ;
public void show(){
System.out.println("吃饭");
}
}
class Test {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);
System.out.println(person.age);
person.show();
}
}
方法中还有一种特殊的方法称为 构造方法 (construction method)
在实例化对象的时候会被自动调用到的方法, 方法名字和类名相同, 用于对象的初始化.
虽然能将属性就地初始化, 但是有些时候可能需要进行一些更复杂的初始化逻辑, 那么就可以使用构造方法.后面会详细介绍构造方法的语法.
3 . static关键字
1. 修饰属性
2. 修饰方法
3. 代码块
4. 修饰类
Java的静态属性是相对于类来说的,与对象无关。换言之,同一个类的不同实例共用一个静态属性。
3.1 修饰属性
class TestDemo{
public int a;
public static int count; }
public class main{
public static void main(String[] args) {
TestDemo t1 = new TestDemo();
t1.a++;
TestDemo.count++;
System.out.println(t1.a);
System.out.println(TestDemo.count);
System.out.println("============");
TestDemo t2 = new TestDemo();
t2.a++;
TestDemo.count++;
System.out.println(t2.a);
System.out.println(TestDemo.count);
}
}
运行结果:
1
1
=============
1
2
这里就能看的出来同一个类的不同实例共用一个静态属性。
count存储在方法区,被static所修饰,所有类共享。且不属于对象;访问方式:类名.属性
3.2 修饰方法
如果在任何方法上应用 static 关键字,此方法称为静态方法。
1.静态方法属于类,而不属于类的对象。
2.可以直接调用静态方法,而无需创建类的实例,访问方式:类名.方法名。
3.静态方法可访问静态数据成员 ,并可以改变静态数据成员的值
class Person {
public String name;
public int age ;
public static void show(){
System.out.println("吃饭");
}
}
class Test {
public static void main(String[] args) {
Person.show();
}
}
注意:
. 静态方法不能直接使用非静态数据成员或调用非静态方法(非静态数据成员和方法都是和实例相关的).
. this和super两个关键字不能在静态上下文中使用(this 是当前实例的引用, . . super是当前实例父类实例的引用, 也是和当前实例相关
. 我们曾经写的方法为了简单, 都统一加上了 static. 但实际上一个方法具体要不要带 static, 都需要是情形而定.
. main 方法为 static 方法
———————————————————————————————————————————————————————