一、对象在计算机中的执行原理
Student s1 = new Student();
这句话中的原理如下
-
Student s1
表示的是在栈内存中,创建了一个Student类型的变量,变量名为s1 -
new Student()
会在堆内存中创建一个对象,而对象中包含学生的属性名和属性值同时系统会为这个Student对象分配一个地址值
-
接着把对象的地址赋值给栈内存中的变量s1,通过s1记录的地址就可以找到这个对象
二、类和对象的注意事项
// 定义类
public class 类名{
1、成员变量(代表属性,一般是名词):数据类型 名称;
2、成员方法(代表行为,一般是动词)
3、构造器
4、代码块
5、内部类
}
// 创建对象
类名 对象名 =new 构造器();
// 对象怎么使用
对象名.成员变量
对象名.成员方法
- 类名建议用英文单词,首字母大写,满足驼峰模式,且要有意义,比如:Student、Car…
- 类中定义的变量也称为成员变量(对象的属性),类中定义的方法也称为成员方法(对象的行为)。
- 成员变量本身存在默认值,在定义成员变量时一般来说不需要赋初始值(没有意义)。
- 一个代码文件中,可以写多个class类,但只能一个用public修饰,且public修饰的类名必须成为代码文件名。
- 对象与对象之间的数据不会相互影响,但多个变量指向同一个对象时就会相互影响了。
- 如果某个对象没有一个变量引用它,则该对象无法被作了,该对象会成为所谓的垃圾对象。
三、this关键字
作用
代表了当前对象的地址,可以访问当前对象的成员变量和成员方法。
在构造器中:this在构造器中,代表构造器正在初始化的那个对象。
public Car(String name, double price){
// 注意:this在构造器中,代表构造器正在初始化的那个对象。
System.out.println(this);
this.name = name;
this.price = price;
}
在方法中:this在方法中,谁调用这个方法this就代表谁!
public void goWith(String name){
// 注意:this在方法中,谁调用这个方法this就代表谁!
System.out.println(this.name +"正在和"+ name +"比赛");
}
四、构造器
什么是构造器
构造器其实是一种特殊的方法,但是这个方法没有返回值类型,方法名必须和类名相同。
无参构造器:初始化一个类的对象,并返回这个对象的地址里面的数据都是默认值
有参构造器:初始化一个类的对象,并返回这个对象的地址并且可以同时为对象赋值。
public class Student{
// 无参数构造器
public Student{
}
// 有参数构造器
public Student (String name,double score){
}
}
构造器的特点
在创建对象时,会调用构造器。
new Student()
就是在执行构造器,当构造器执行完了,也就意味着对象创建成功。
构造器的常见应用场景
创建对象时,同时完成对对象成员变量(属性)的初始化赋值。
构造器的注意事项
类在设计时,如果不写构造器,Java是会为类自动生成一个无参构造器的。
一旦定义了有参数构造器,Java就不会帮我们的类自动生成无参构造器了,此时就建议自己手写一个无参数构造器出来了。
五、封装
面向对象的三大特征-----封装、继承、多态
什么是封装
用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理数据的方法,都设计到一个对象中去
封装的设计规范:合理隐藏、合理暴露。
成员变量private私有化,被private修饰的变量或者方法,只能在本类中被访问
合理暴露:提供成套的getter和setter方法暴露取值和赋值
六、实体JavaBean
什么是实体类
①类中的成员变量都要私有,并且要对外提供相应的getXxx,setXxx方法
②类中必须要有一个公共的无参的构造器。
特点
实体类仅仅只用来封装数据,只提供对数据进行存和取的方法
应用场景
JavaBean实体类,只负责封装数据,而把数据处理的操作放在其他类中,以实现数据和数据处理相分离。
成员变量和局部变量的区别
区别 | 成员变量 | 局部变量 |
---|---|---|
类中位置不同 | 类中,方法外 | 常见于方法中 |
初始化值不同 | 有默认值,不需要初始化赋值 | 没有默认值,使用之前必须完成赋值 |
内存位置不同 | 堆内存 | 栈内存 |
作用域不同 | 整个对象 | 在所归属的大括号中 |
生命周期不同 | 与对象共存亡 | 随着方法的调用而生,随着方法的运行结束而亡 |
七、static
1.修饰成员变量
Java中的成员变量按照有无static修饰分为两种:类变量、实例变量。
类变量 :有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享。
由于静态变量是属于类的,只需要通过类名就可以调用:类名.静态变量
实例变量(对象的变量):无static修饰,属于每个对象的。
实例变量是属于对象的,需要通过对象才能调用:对象.实例变量
2.修饰成员方法
成员方法根据有无static也分为两类:类方法、实例方法。
有static修饰的方法,是属于类的,称为类方法;调用时直接用类名调用即可。
无static修饰的方法,是属于对象的,称为实例方法;调用时,需要使用对象调用。
类方法的常见应用场景
类方法最常见的应用场景是做工具类
工具类是什么
工具类中的方法都是一些类方法,每个方法都是用来完成一个功能的,工具类是给开发人员共同使用的。工具类里的方法全都是静态的,推荐用类名调用为了防止使用者用对象调用。我们可以把工具类的构造方法私有化。
3.注意事项
- 类方法中可以直接访问类的成员,不可以直接访问实例成员。
- 实例方法中既可以直接访问类成员,也可以直接访问实例成员。
- 实例方法中可以出现this关键字,类方法中不可以出现this关键字的。
4.代码块
代码块
代码块是类的5大成分之一(成员变量、构造器、方法、代码块、内部类)。
代码块分为两种:
1.静态代码块:
格式:static {}
特点:类加载时自动执行,由于类只会加载一次,所以静态代码块也只会执行一次。
作用:完成类的初始化,例如:对类变量的初始化赋值。(不需要创建对象就能够执行)
2.实例代码块:
格式:{}
特点:每次创建对象时,执行实例代码块,并在构造器前执行
作用:和构造器一样,都是用来完成对象的初始化的,例如:对实例变量进行初始化赋值。(每次创建对象之前都会先执行实例代码块。)
5.static应用(单例设计模式)
单例设计模式
~确保一个类只有一个对象。
写法
~把类的构造器私有。
~定义一个类变量记住类的一个对象。
~定义一个类方法,返回对象。
public class A{
//2、定义一个类变量记住类的一个对象
private static A a = new A();
//1、必须私有类的构造器
private A(){
}
// 3、定义一个类方法返回类的对象
public static A getObject(){ return a; }
}
(1)饿汉模式:拿到对象时对象已经创建好啦
public class A {
//2、定义一个类变量记住类的一个对象
private static A a= new A();
// 1、私有构造器
private A(){
}
// 3、定义一个类方法返回对象
public static A getObject(){return a;}
}
(2)懒汉模式
懒汉式单例设计模式
~拿对象时,才开始创建对象。
写法
~把类的构造器私有。
~定义一个类变量用于存储对象。
~提供一个类方法,保证返回的是同一个对象。
public class B{
//懒汉式单例类
private static B b;
private B(){
}
public static B getObject(){
if (b == null){
System.out.println("第一次创建对象");
b = new B();
}
return b;
}
}
八、继承
1. 定义
什么是继承
Java中提供了一个关键字extends,用这个关键字,可以让一个类和另一个类建立起父子关系。
public class B extends A{
}
A类称为父类(基类 或超类)。
B类称为子类(派生类)。
继承的特点
子类能继承父类的非私有成员(成员变量、成员方法)。
继承后对象的创建
子类的对象是由子类、父类共同完成的。
继承的好处
继承可以提高代码的复用性。