欢迎关注我的公众号【软件大爆炸】
Java学习中的碎碎念
Java中易忽略的基础知识
Java面向对象基础
Java中的核心类
Java抽象类和接口
Java中的异常
Java中的泛型与集合
常见缩写概念:
面向对象的分析(Oict Oriented Analysis,OOA)、
面向对象的设计( Object Oriented Design,OOD),
以及面向对象编程( Object Oriented Programming,OOP)。
类和类之间具有一定的结构关系。
类的关系主要有两种:继承关系、关联关系。继承关系,是“一般~具体”的结构关系;关联关系是“整体-部分”的结构关系。
更详细的介绍可以参考这位大佬的文章:传送门
面向对象具有以下四个方面的特征:唯一性、分类性、继承性以及多态性。
其中分类性指:将具有一致属性和行为的对象抽象成类,只反映与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。
创建一个类的对象都经过如下两步:
第一步,声明类的一个变量,即定义该类的一个对象,此时在栈上会分配空间存储对象在堆中的地址(即对象的引用);
·第二步,创建该对象的实际物理空间,即在堆中为该对象分配空间,并把此空间的地址(即引用)赋给该变量(对象名),此步骤是通过使用new关键字来实例化该类的个对象。
例如:Person p; p = new Person();
所有类的对象都是动态分配空间,并且类的成员变量具有默认初始值
形参之间传递数值的方式有两种:
值传递( call by value)。
引用传递( call by reference)。
当参数的数据类型是基本数据类型时,实参和形参之间是按值传递的。
值传递时会将数值copy一份,实参和形参在内存中占用不同的空间,两者互不影响,因此形参的改变不会影响实参。
引用传递时会通过传递的地址获取其指向的内存空间,进而在原来的内存空间直接进行操作,此时若修改了形参的值,实参也将改变。
构造方法(也称为构造函数)是类的一个特殊方法,用于创建对象时初始化对象中的属性值。前面内容在创建 Person对象时,对象中的属性都被初始化成默认值(数值类型的默认值为0,引用类型默认为nul),如果想在创建对象时给属性初始化其他的值,则需要通过类的构造方法来完成。
这个过程经历了四个阶段
以Person p = new Person("xiaoming",15,"zhengzhou");
为例来说明
1.首先在栈中生成一个地址变量p
2.在堆中生成一个Person实例,并对各属性内容进行初始化
3.执行构造方法,将构造器属性的值进行赋值
4.将堆中创建的对象的地址用=
赋值给p
private、 protected和 public都是关键字,而 friendly不是关键字,它只是一种默认访问修饰符的称谓而已。
静态成员的限制级别是“类相关”的,“类相关”的静态成员则可以直接通过类名调用(即类名。属性、类名。方法),无须通过声明的实例对象进行访问。
类变量属于整个类,当系统第一次准备使用该类时,系统会为该类的类变量分配内存空间,此时类变量开始生效,直到该类被卸载,该类的类变量所占有的内存才被系统的垃圾回收机制回收;当系统创建该类的对象时,系统不会再为类变量分配内存,也不会再次对类变量进行初始化,即对象根本不拥有类变量,通过对象访问类变量只是一种假象,系统会在底层转换为通过类来访问类变量。因此,不建议通过对象访问类变量。类方法与类变量类似,也是属于类而不属于该类的对象
public class StudentDemo {
public static void main(String[] args) {
Student p = new Student(1001, "xiaowang");
Student.showClassID();
// p.showClassID();//底层会自动转化成Student.showClassID();
}
}
class Student{
private int sid;
private String name;
static int calssID = 1;//静态成员变量
public Student(int sid, String name) {
this.sid = sid;
this.name = name;
}
public static void showClassID(){
System.out.println("班级号是"+Student.calssID);
}
}