目录
1.面向对象的概述
=========
面向对象思想是人类最自然的思考方式,它将所有预处理的问题抽象为对象,同时了解这些对象具有哪些相应的属性以及行为,以解决这些对象面临的一些实际问题,面向对象设计实质上就是对现实世界的对象进行建模操作。
1.1 对象
对象是一个抽象概念,英文称作“Object”,表示任意存在的事物。世间万物皆为对象,对象是事物存在的实体,例如一个人。
通常将对象划分为两个部分,即静态部分与动态部分。静态部分被称为 “属性” ,任何对象都具备自身属性,这些属性不仅是客观存在的,而且是不能被忽视的,例如人的性别。动态部分是指的是对象的行为,即对象执行的动作,例如人可以走和跑。
1.2 类
类是封装对象属性和行为的载体,反过来说具有相同属性和行为的一类实体被称作为类,例如定义一个燕子类,它具备翅膀,喙,爪子等属性,飞行,睡觉,觅食等行为,以只从南方飞回北方的燕子则被视为燕子类的一个对象,具体关系如下图所示:
在Java语言中,类包括对象的属性和方法。类中对象的属性是以成员变量的形式定义的,对象的行为是以方法的形式定义的。
1.3 面向对象程序设计的特点
面向对象程序设计具有以下特点:封装性 继承性 多态性
1.3.1 封装
封装是面向对象编程的核心思想。将对象的属性和行为封装起来,其载体就是类,类会对用户隐藏现实细节,这就是封装的思想,例如:你去饭店吃饭,你只用吃,你无须知道饭是厨师怎样做出来的。
采用封装的思想保证内部数据结构的完整性,使用该类的用户不能直接操作此数据结构,只能操作类允许公开的数据。这样避免外部操作对内部数据产生影响,提高程序的可维护性。
1.3.2 继承
矩形,菱形,平行四边形都是四边形。因为四边形与它们具有共同的特征:有四条边。将四边形合理延伸,就会得到上述图形。以平行四边形为例,如果把平行四边形看作四边形的延伸,那么平行四边形就复用了四边形的属性和行为,同时添加了平行四边形特有的属性和行为,例如平行四边形对边平行且相等。Java中,可以将平行四边形类看作是继承四边形类后产生的类,其中平行四边形类称为子类,四边形类称为父类或超类。
注意:Java中,子类的实例都是父类的实例,但不能说父类的实例都是子类的实例。
综上,继承是实现和重复利用的重要手段,子类通过继承,复用父类的属性和行为的同时又添加子类特有的属性和行为。
1.3.3 多态
将父类对象应用于子类的特征就是多态。父类衍生出不同的子类,子类继承父类特征的同时,也具备自己的特征,并且能够实现不同的效果,这就是多态化的结构。
2.类与对象
======
类是封装对象的属性和行为的载体,Java中定义类时使用class关键字,语法格式如下:
class 类名称{
//类的成员变量
//类的成员方法
}
对象的属性以成员变量的形式存在,对象的行为以成员方法的形式存在。
2.1 成员变量
Java中,对象的属性也称为成员变量,成员变量与普通变量定义一样,格式:
数据类型 变量名称;
定义变量时可以赋值也可以不赋值。
我们可以先定义一个Student类,成员变量对应类对象的属性。
public class Student{
String name; //姓名
String gender; //性别
int age; //年龄
}
成员变量就是普通的变量,可以赋值也可以不赋值,如果不设置初始值,系统会有默认值,
Java中常见类型的默认值:
数据类型 | 默认值 | 说明 |
byte short int long | 0 | 整型0 |
float double | 0.0 | 浮点0 |
char | ' ' | 空格字符 |
boolean | false | 逻辑假 |
引用类型 | null | 空值 |
2.2 成员方法
成员方法对应类对象的行为,主要用来定义可执行的操作。
成员方法的定义,语法格式:
访问修饰符 返回值类型 方法名(参数列表){
//方法体
return 返回值;
}
访问修饰符可以是public private protected 任意一个也可以不写,主要用来控制方法的访问权限
访问修饰符:
public | protected | default(省缺) | private | |
本类 | 可见 | 可见 | 可见 | 可见 |
本类所在包 | 可见 | 可见 | 可见 | 不可见 |
其他包中的子类 | 可见 | 可见 | 不可见 | 不可见 |
其他包中的非子类 | 可见 | 不可见 | 不可见 | 不可见 |
说明: 方法的定义必须在某个类中,定义方法时如果没有指定权限修饰符,方法的默认访问权限为省缺。
例:
public void SetStudent(int age,String name){
System.out.println(age+name);
}
因为是void类型所以无返回值,如果有返回值,返回值类型必须与方法的返回值类型一致。
2.3 构造方法
在类中存在一种特殊类型的方法,就是构造方法,构造方法与类同名,对象的创建就是通过构造方法完成的。每当类实例化一个对象时,类都会自动调用构造方法。
构造方法的特点:
· 构造方法没有返回值类型,也不能定义为void
· 构造方法名称要与本类的名称相同
· 构造方法的主要作用是完成对象的初始化工作,它能把定义对象的参数传给对象成员
构造方法的定义语法:
public class Student {
//构造方法
public Student(){
}
}
public 为构造方法的修饰符
如果类中没有明确定义构造方法,则编译器会自动创建一个不带参数的默认构造方法
构造方法可以为成员变量赋值,并且构造方法可以带有参数。例:
public class Student {
int age;
String name;
String gender;
public Student(int age,String name,String gender){ //构造方法
this.age = age;
this.name = name; //赋值
this.gender = gender;
}
}
**注意:**只有在类中没有定义任何构造方法时,编译器才会创建一个默认无参的构造方法
实例:创建一个学生类,用构建方法为成员变量赋值,并输出打印。
public class Student {
int age;
String name;
String gender;
public Student(int age,String name,String gender){
this.age = age;
this.name = name;
this.gender = gender;
}
void printStudent(){
System.out.println(name+“-”+gender+“-”+age);
}
public static void main(String[] args) {
Student s = new Student(20,“XiaoHua”,“女”);
s.printStudent();
}
}
输出结果:
2.4 局部变量
如果在成员方法内定义一个变量,这个变量就被称为局部变量
局部变量在方法执行时被创建,在方法执行结束时被销毁。局部变量在使用时必须初始化,否则会出现编译错误。例:
编译器直接飘红
2.5 this关键字
先看一段代码:
public class Student {
int age;
String name;
String gender;
public Student(int age,String name,String gender){
age = age;
name = name; //哪个是参数,哪个是成员变量呢?
gender = gender;
}
当类中的成员变量与成员方法中的参数重名时,方法如何使用成员变量呢?
在Java中,规定使用this关键字来代表本类对象的引用,this被隐式的用于引用对象的成员变量和方法。将上述代码改进如下:
public Student(int age,String name,String gender){
this.age = age;
this.name = name;
this.gender = gender;
}
· this关键字引用的就是本类的一个对象,在局部变量或方法参数覆盖了成员变量时,如上面代码情况,就要添加this关键字明确引用的是类成员还是局部变量或方法参数。
· 如果省略this关键字直接写成 name = name ,那只是把参数name赋值给参数变量本身而已,成员变量name的值没有改变,因为参数name在方法的作用域中覆盖了成员变量name。
· this关键字除了可以调用成员变量或成员方法之外,还可以作为方法的返回值,例:
public class Book{
public Book getbook(){
return this; //返回Book类引用
}
}
- static关键字
=============
由static 修饰的变量,常量,方法分别称为静态变量,静态常量,静态方法,也被称作类的静态成员。
3.1 静态变量
许多时候不同类之间需要同一个变量进行操作,例如同一个班的学生,学生本身的属性不同,但是所有学生共享一个教室。在Java中如果用static修饰共享的变量,那么该变量就是静态变量。
调用静态变量的语法如下: 类名.静态成员
先看这样的一段代码:
public class Student {
int age;
String name;
String gender;
static String classRoom = “307”;
public Student(int age,String name,String gender){
this.age = age;
this.name = name;
this.gender = gender;
}
void printStudent(){
System.out.println(name+“-”+gender+“-”+age);
}
public static void main(String[] args) {
Student s1 = new Student(20,“XiaoHua”,“女”);
Student s2 = new Student(22,“XiaoFang”,“女”);
Student s3 = new Student(23,“XiaoZhang”,“男”);
Student s4 = new Student(24,“XiaoLi”,“男”);
}
}
在这里打断点:
进行调试:
发现静态成员变量不在具体的对象中存在。
静态成员只有一份,被所有的对象共享,当类被卸载时,静态成员才会被销毁。
静态成员变量访问的方式有两种:通过成员访问和直接通过类名访问,**推荐:**类.静态成员变量
3.2 静态方法
如果想要使用类中的成员方法,需要先将这个类进行实例化,但有些时候不想或者无法创建类的对象时,还要调用类中的方法才能够完成,这种情况下可以使用静态方法,调用静态方法格式如下:
类名.静态方法();
例如这段代码:
public class Student {
int age;
String name;
String gender;
static String classRoom = “307”;
public Student(int age,String name,String gender){
this.age = age;
this.name = name;
this.gender = gender;
}
public static String getClassRoom(){ //静态成员方法
return classRoom;
}
public static void main(String[] args) {
System.out.println(Student.getClassRoom());
}
}
利用静态成员方法访问静态成员变量。
**注意:**静态方法不能访问实例变量。
- 代码块
=======
4.1 代码块概念及分类
使用 { } 定义的一段代码称为代码块,根据代码块的位置以及关键字,分为以下四种:
普通代码块,构造代码块,静态代码块,同步代码块(暂时不谈)
4.2 普通代码块
普通代码块:定义在方法中的代码块。
public static void main(String[] args) {
int a = 10;
System.out.println(a);
}
4.3 构造代码块
构造块:定义在类中的代码块(无任何修饰符),也叫实例代码块,一般用于初始化实例成员变量
public class Student {
int age;
String name;
String gender;
public Student(){
System.out.println(“我是构造方法”);
}
//实例代码块
{
this.age = 20;
this.name = “XiaoHe”;
this.gender = “男”;
}
public void printStudent(){
System.out.println(name+gender+age);
}
public static void main(String[] args) {
Student s = new Student();
s.printStudent();
}
}
**注意事项:**实例代码块优先于构造方法执行,因为编译完成后,编译器会将实例代码块中的代码拷贝到每个构造方法第一条语句前。
4.4 静态代码块
使用static定义的代码块称为静态代码块,一般用于初始化静态成员变量
public class Student {
int age;
String name;
String gender;
static String classRoom;
public Student(){
System.out.println(“我是构造方法”);
}
//实例代码块
{
this.age = 20;
this.name = “XiaoHe”;
this.gender = “男”;
}
//静态代码块
static{
classRoom = “8-b-307”;
}
public void printStudent(){
System.out.println(name+gender+age);
}
public static void main(String[] args) {
Student s = new Student();
s.printStudent();
System.out.println(s.classRoom);
}
}
注意事项:
静态代码块不管生成多少个对象,只会执行一次
静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
5. 类的主方法
=========
主方法是类的入口点,它指定了程序从何处开始,提供对程序流向的控制,Java编译器通过主方法来执行程序。
主方法语法如下:
public static void main(String[] args) {
//方法体
}
主方法的特性:
· 主方法是静态的,所以要直接在主方法中调用其他方法,则该方法也必须是静态的。
· 主方法没有返回值
· 主方法的形参为数组。其中args[0]~args[n]分别代表程序的第一个参数到第n+1个参数,可以使用args
.length获取参数的个数。
最后
小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你需要这些资料,⬅专栏获取
t.println(name+gender+age);
}
public static void main(String[] args) {
Student s = new Student();
s.printStudent();
System.out.println(s.classRoom);
}
}
注意事项:
静态代码块不管生成多少个对象,只会执行一次
静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
5. 类的主方法
=========
主方法是类的入口点,它指定了程序从何处开始,提供对程序流向的控制,Java编译器通过主方法来执行程序。
主方法语法如下:
public static void main(String[] args) {
//方法体
}
主方法的特性:
· 主方法是静态的,所以要直接在主方法中调用其他方法,则该方法也必须是静态的。
· 主方法没有返回值
· 主方法的形参为数组。其中args[0]~args[n]分别代表程序的第一个参数到第n+1个参数,可以使用args
.length获取参数的个数。
最后
小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-tBAfXhFT-1719678063952)]
[外链图片转存中…(img-tGeabC58-1719678063953)]
[外链图片转存中…(img-y5bbfd75-1719678063954)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你需要这些资料,⬅专栏获取