Java基础知识之类与对象,详细的介绍了类与对象的用法,以及关键字final、static、this。内容适合初学者进行学习,都是一些java基础必备的知识点。
前言
- 本文章适合初学者进行详细的学习,内容都是java必备掌握的知识点
- 文章内容并没有太深、但知识点丰富
1、面向对象的特点
- 封装性:将数据和对数据操作封装在一起,可以保护我们的数据。
- 继承型:子类继承父类,拥有了父类的能力基础上完善自己。
- 多态性:同一操作被不同类型对象调用产生不同效果
2、类体
2.1类的声明
- 见名知意
- 首字母大写
- 驼峰风格 StudyJava、WakeUp等等
2.2成员变量
- 类中有成员变量和方法
- 成员变量的类型:整型、浮点型、字符型、逻辑类型、引用类型:数组、对象和接口
- 成员变量有默认值而局部变量却没有默认值(所以我们在使用局部变量时,要给定具体的值,局部变量可以使用var)
2.3变量和方法声明
- 变量和方法声明规则相同
- 第二个单词的首字母大写
- 见名知意
- studyJava、getSum等等
3、类之间的关系
- 依赖("uses-a"):一个类的方法 操作 另一个类的对象
| public class A { |
| public void uses_a(C e) { |
| |
| } |
| } |
| class C { |
| } |
- 聚合("has-a"):类A的对象 包含 类B的对象
| class student { |
| } |
| class school { |
| student A; |
| student B; |
| } |
| public class A extends C{ |
| public static void main(String[] args) { |
| A a = new A(); |
| a.is_a(); |
| } |
| } |
| class C { |
| public void is_a() { |
| } |
| } |
4、构造方法
- Java中有默认的无参构造,Student类中就有
| class Student{ |
| Student(){ |
| } |
| |
| int A; |
| Student(int a){ |
| A = a; |
| } |
| } |
- 参数构造方法是和类名相同的
- 并且没有任何的返回值类型
- 每个类可以有一个以上构造器
- 参数不限、总是伴随着new操作符一起调用
- 常常用来给成员变量初始化使用
5、创建对象
5.1对象的声明
- 类的名字 + 对象的名字;
Student stu;这个时候只是声明了一个对象,并没有给它引用,这是一个空对象我们无法使用
- 使用了空对象则会出现NullPointerException异常
5.2new操作符的作用
new Student();在我们new了一个引用后,我们将得到一个地址,我们拿着这个得到的地址。
- 去给我们刚刚声明的对象,这样这个对象才真正的产生了!!!
- Student stu = new Student();
5.3垃圾回收机制
- Java中所谓的辣鸡回收机制就是,如果一个对象(实体)不在被任何对象引用,则将它释放内存。
6、final、static、this关键字
6.1final
- final:最终的
- ①final可以用来修饰的结构:类、方法、变量
- ②不能被其他类继承
- ③表示此方法不能被重写
- ④final修饰一个属性,就是一个常量
- 就是不可变的,String类具有不可变性,所以就用final修饰
6.2static:静态的
- ②static可以用来修饰:属性、方法、代码块、内部类
- ③使用static修饰属性:静态变量(类变量、共享)
- ④statci修饰的是大家共同拥有的,缺点就是谁都可以改变这个值
- ⑤随着类的加载而加载,虽然加载的很快,但是会导致浪费资源问题。
- 像
Math.random()就是用static修饰的,不然我们需要先new 一个对象 然后再调用random()方法
- 通过类名直接调用方法
6.3this字段作用
- this()通常在构造器中第一句使用,可以调用父类的构造方法。具体如何使用待学完继承后详细讲解
| class Father { |
| String name; |
| int age; |
| public Father(String name,int age) { |
| this.name = name; |
| this.age = age; |
| |
| } |
| } |
7、方法参数
- 学过C语言的小伙伴都会认为方法的传参有两种情况:值传递和引用传递
- 同时也发现这个在Java中也非常适用,所以就觉得Java也是分为这两种情况
| 为了误导大家,我特意举个例子 |
| public class A{ |
| public static void main(String[] args) { |
| B test2 = new B(20); |
| test2.swap(test2); |
| |
| |
| System.out.println(test2.age); |
| } |
| } |
| class B { |
| int age; |
| public void swap(B c) { |
| c.setAge(30); |
| } |
| public B(int age) { |
| this.age = age; |
| } |
| public void setAge(int age) { |
| this.age = age; |
| } |
| } |
| public class A{ |
| public static void main(String[] args) { |
| People zs = new People("张三", 10); |
| People ls = new People("李四", 20); |
| ls.swap(zs,ls); |
| System.out.println(zs); |
| |
| } |
| } |
| class People { |
| String name; |
| int age; |
| |
| public People() { |
| } |
| |
| public void swap(People a, People b) { |
| People temp = null; |
| temp = a; |
| a = b; |
| b = temp; |
| } |
| public People(String name,int age) { |
| this.name = name; |
| this.age = age; |
| } |
| |
| @Override |
| public String toString() { |
| return "People{" + |
| "name='" + name + '\'' + |
| ", age=" + age + |
| '}'; |
| } |
| } |
- 那么小伙伴们可能会问了,那第一种情况为什么可以改变呢???
-
因为第一种情况,我们改变的是这个对象的状态,虽然我们仍然传的是地址值,但是我们在方法体内将此对象的状态改变啦,大家可以多看看认真思考一下、反复推敲。
- 一定要记住Java中没有引用传递,只有值传递。
8、方法重写与重载
8.1面试题:重写和重载有什么区别???
话说他俩除了名字差个字以外,其他不是一个概念,下面来带大家了解二者分别是什么
8.2重载
- 两个方法的参数个数不同
- 两个方法的参数类型不同
- 不考虑返回值类型
- 两个方法名字相同
| |
| public void t1(int a,double b){ |
| } |
| public String t1(String a,double b){ |
| } |
8.3重写
- 子类继承了父类的方法
- 将父类的方法重新修改其中的功能。(修改方法体内)
- 相当于拥有了父亲的方法,在父亲方法中完善自我。
| class Son extends Father{ |
| public void run() { |
| System.out.println("爸爸虽然我跑,但是我跑的更快"); |
| } |
| } |
| class Father { |
| public void run() { |
| System.out.println("爸爸会跑"); |
| } |
| } |
9、导包
1.我们常用的包有:
- java.lang包含所有的基本语言类
- java.io包含所有的输入/输出类
- java.util包含实用类
- java.sql包含操作数据库的类
- java.net包含所有实现网络功能的类
2.导入一个包要用import
- eg:import java.util.Scanner;
- 可以使用通配符“*”,表示导入包中所有类
- eg:import java.sql.*;
10、四种访问权限

11、基本类型封装和对象数组
11.1基本类型封装
- Java中基本数据类型包括:boolean、byte、short、char、int、long、float和double
- 同时将他们变成对象的形式Byte、Integer、Short、Long、Float、Double和Character
- 在后面的学习我们能够使用上。这里就简单介绍一下
- 并且Java中有自动装箱和拆箱,其实用起来非常方便。
11.2对象数组
- 和普通数组一样其实很简单
- Student stu1,stu2,stu3,stu4,stu5;像这种情况我们要声明多个对象时可以使用对象数组
Student[] stu = new Student[10];
stu[0] = new Student();
12、结尾
- 对于类与对象的内容就总结这么多,希望大家可以多多练习。如果有不足之处,希望大家多多包涵,多多支持。如果有不懂的地方可以直接私信问我,欢迎来访!
- 我将会继续更新关于Java的学习知识,感兴趣的小伙伴可以关注一下。
- 文章写得比较走心,用了很长时间,绝对不是copy过来的!
- 尊重每一位学习知识的人,同时也尊重每一位分享知识的人。
本文作者:lx-meteor
本文链接:https://www.cnblogs.com/lx-meteor/p/16092355.html
版权声明:本作品采用lx-Meteor许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步