优点:代码可复用、容易维护和开发、可扩展性强(比如洗衣服不想用洗衣液了可以换成洗衣粉),所以更适合大型项目。
缺点:比面向过程的性能低
总结:
-
面向过程:强调过程。
-
面向对象:强调对象、分工和协作。
2. 类与对象
类:类是一个抽象的概念,在现实世界中不存在。
类本质上是在现实世界中具有共同特征的事物,通过提取这些共同特征形成的概念叫做“类”,比如人类、动物类、汽车类、鸟类等。
类其实就是一个模板,类中描述的是所有对象的“共同特征”。
对象:对象是一个具体的概念,在现实世界中真实存在的。比如李白、爱迪生、贝克汉姆都是对象,他们都属于人类。对象就是通过类创建出的真实的个体。
2.1 抽象
将具有相同特征的对象抽取共同特征的过程叫做“抽象”。
2.2 实例化
对象还有一个别名叫做“实例”,通过类创建对象的过程叫做“实例化”。
3. 类的定义
我们都知道类具有相同的特征,特征包含静态的和动态的。
鸟类的静态特征是长着一双翅膀,动态特征是会飞。狗类的静态特征是嗅觉灵敏,动态特征是会“汪汪”叫…
所以,类 = 属性 +方法
3.1 java 定义类的语法格式
[修饰符] class 类名 {
属性 + 方法
}
注:这里修饰符可以省略,后面会讲解。
复制代码
案例一:用 java 代码创建人类
public class Person {
// 姓名
private String name;
// 年龄
private int age;
// 性别 0-女 1-男
private int sex;
// 身份证
private String idCard;
// 吃饭方法
public void eat(){
System.out.printf(“人要吃饭”);
}
}
复制代码
在上面的例子中,属性以“变量”的形式存在。为什么呢?
因为属性是静态特征,属性包含的是数据,比如年龄18岁,性别男,身高180。所以在 java 程序中有关属性的数据只能存在于变量中。
案例二:用 java 代码创建动物类
public class Animal {
// 体重
private int weight;
public void sleep(){
System.out.println(“动物要睡觉”);
}
}
复制代码
注:在 java 中凡是用 class 定义的类型都是引用类型,他的类型就是类名本身。
3.2 实例变量
实例变量:把对象共同的静态特征抽取出来存放在类中的变量里面,比如人类中的年龄、性别、身高等。
上面类中的变量就是实例变量,因为对象又叫做实例,所以实例变量就是对象级别的变量。
4. 对象的创建和使用
4.1 创建对象
我们学会定义类之后,该如何创建对象呢?
很简单,new 一下。
语法格式:
类名 变量名 = new 类名();
复制代码
我们 new 出来的对象也需要用一个变量来接收,例如:
Student student = new Student();
People people = new People();
Animal animal = new Animal();
复制代码
4.2 使用对象
创建对象之后,我们怎样使用对象?怎样获取对象的属性?怎样访问对象的方法?
对象.属性 对象.方法
public class Person {
// 姓名
private String name;
// 年龄
private int age;
// 性别 0-女 1-男
private int sex;
// 身份证
private String idCard;
// 吃饭方法
public void eat(){
System.out.printf(“人要吃饭”);
}
public static void main(String[] args) {
Person person1 = new Person();
System.out.println(“1号人类姓名:”+person1.name);
System.out.println(“1号人类年龄:”+person1.age);
System.out.println(“1号人类身份证:”+person1.idCard);
person1.eat();
System.out.println(“-----------------------”);
Person person2 = new Person();
System.out.println(“2号人类姓名:”+person2.name);
System.out.println(“2号人类年龄:”+person2.age);
System.out.println(“2号人类身份证:”+person2.idCard);
person2.eat();
}
}
复制代码
运行结果:
我们都知道一个类可以创建很多对象,但是上面人类创建的对象的年龄为什么是0?身份证为什么是null?
这是因为在 java 中,我们在创建对象的时候如果没有给变量手动赋值,系统会对实例变量默认赋值。默认值如下所示:
| 数据类型 | 默认值 |
| — | — |
| byte | 0 |
| short | 0 |
| int | 0 |
| long | 0L |
| float | 0.0f |
| double | 0.0 |
| 引用类型 | null |
5. 画个内存图
为什么要学习 JVM 内存图?
因为 JVM 内存图可以加深你对 Java 运行机制的理解。
Java 虚拟机在运行 java 程序时,会将自己管理的内存划分为几个区域,每个区域都有自己的用途,他们的创建时间和销毁时间也不一样。
JVM 内存很复杂,这里我们主要关注三个区域:栈、堆、方法区。
栈:主要存放方法信息,比如 main 方法。
堆:主要存放对象实例,你可以想象成这里“堆满了对象”。
方法区:这里主要用来存储类的信息、静态变量、常量以及编译器编译后的代码。
前面的例子中,我们创建了两个 Person 类的对象 person1 和 person2。
person1 和 person2 实际上存储的是堆中对象的内存地址:ox00001 和 ox00002,所以他们分别指向了堆中的两个对象。
所以当我们访问对象的实例变量时,先根据对象变量存储的内存地址找到该对象,再获取该对象的实例变量存储的数据。
6. 空指针异常
有时候我们会遇到空指针异常,例如
public class Student {
// 姓名
private String name;
public static void main(String[] args) {
Student student = null;
System.out.println(“学生姓名:”+student.name);
}
}
复制代码
运行结果:
为什么会有空指针异常?通过下面的内存图就能明白:
你新建了空的对象变量 student,它里面没有存任何对象的内存地址。所以当你去访问它的实例变量时,它找不到堆中的对象,就会抛出空指针异常。
7. 构造方法
构造方法是啥?通过“构造”的字面意思隐隐约约感觉它是造东西用的。可是造啥呢?
对,造对象用的。
当你 new 对象的时候是通过调用构造方法来完成对象的创建,以及对象属性的初始化操作。
也就是说在创建对象之前会先调用构造方法。
注:
-
- 当类中没有提供任何构造方法,系统默认提供一个无参数的构造方法。
-
- 当类中手动的提供了构造方法,那么系统将不再默认提供无参数构造方法。
7.1 定义构造方法
语法格式:
[修饰符列表] 构造方法名(形式参数列表){
方法体;
}
复制代码
注:
-
构造方法名和类名一致
-
构造方法没有返回值
-
一个类中可以定义多个构造方法,这些构造方法其实是方法的重载
例如:
public class Student {
// 姓名
private String name = “一颗雷布斯”;
public Student() {
System.out.println(“我是一个没有参数的构造方法”);
}
public static void main(String[] args) {
Student student = new Student();
}
}
复制代码
运行结果:
7.2 定义多个构造方法
public class Student {
// 姓名
private String name;
public Student() {
System.out.println(“我是构造方法1”);
}
public Student(String name) {
System.out.println(“我是构造方法2”);
}
public static void main(String[] args) {
Student student1 = new Student();
Student student2 = new Student(“一颗雷布斯”);
}
}
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。
如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。
能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-j8jIQAXk-1711182966719)]
[外链图片转存中…(img-Gl0DJRZw-1711182966720)]
[外链图片转存中…(img-jZBsvacD-1711182966720)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-D89YKImV-1711182966721)]
最后
每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。
如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。
[外链图片转存中…(img-IcTftoUj-1711182966722)]