初学Java---面向对象编程基础(对象与类)

目录

1.面向对象的概述

1.1 对象

1.2 类

1.3 面向对象程序设计的特点

1.3.1 封装

1.3.2 继承

1.3.3 多态

2.类与对象

2.1 成员变量

2.2  成员方法

2.3 构造方法

2.4 局部变量

2.5 this关键字

3. static关键字

3.1 静态变量

3.2 静态方法

4. 代码块

4.1 代码块概念及分类

4.2 普通代码块

4.3 构造代码块

4.4 静态代码块

5. 类的主方法


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   long0整型0
float     double0.0浮点0
char' '空格字符
booleanfalse逻辑假
引用类型null空值

2.2  成员方法


成员方法对应类对象的行为,主要用来定义可执行的操作。

成员方法的定义,语法格式:

访问修饰符 返回值类型 方法名(参数列表){

//方法体

return 返回值;

}

访问修饰符可以是public  private   protected 任意一个也可以不写,主要用来控制方法的访问权限

访问修饰符

publicprotecteddefault(省缺)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类引用

}

}

  1. 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());

}

}

利用静态成员方法访问静态成员变量。

**注意:**静态方法不能访问实例变量。

  1. 代码块

=======

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)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你需要这些资料,⬅专栏获取

  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值