【Java 基础语法】爆肝1W字只为弄懂类和对象,2024年最新数据库mysql教程视频教程

注意

this 和 super 两个关键字不能在静态上下文中使用(this 是当前实例的引用, super 是当前实例父类实例的引用,也是和当前实例相关)【后面会介绍到!】

在这里插入图片描述

4. 总结

就用一段代码作为总结吧

class Person{

public int age; // 实例变量(属于对象)

public static int count; // 静态变量,编译时已经产生(属于类本身),只有一份且存放在方区

public final in SIZE = 10; // 被 final 修饰的叫常量,后续不可以更改(属于对象)

public static final in COUNT = 99; // 静态的常量(属于类本身)

// 实例成员函数

public void eat(){

int a = 10; //局部变量(存放在栈中)

}

// 静态成员函数

public static void staticTest(){

//不能访问非静态成员

// age = 10; 会报错

System.out.println(“StaticTest()”);

}

}

public class Main{

public static void main(String[] args){

// 产生对象 实例化对象

Person person = new Person();// person 为对象的引用

System.out.println(person.age);// 默认值为0

//System.out.println(person.count);// 会有警告!

// 正确访问方式:

System.out.println(Person.count);

System.out.println(Person.COUNT);

Person.staticTest();

// 总结:所有被 stati c所修饰的方法或者属性,全部不依赖于对象。

person.eat();

}

}

emmmm,问一下,为啥 main 函数是静态的,如果是非静态的可以啵,比如

class TestDemo{

public void main(String[] args){

TestDemo testDemo = new TestDemo();

testDemo.main();

}

}

按照非普通成员方法的形式,如果 mian 函数要调就是上述代码吧。但大家发现一个问题没?

如果此时要使用 main 方法,就需要使用对象调用,那么好我们就在 main 方法里创建对象并且调用好了吧。诶?不对呀,要调用 main 方法就要使用对象啊???可我们创建的对象在 main 方法里面,怎么调用???

在这里插入图片描述

所以 main 方法要加上 static !

还有一点就是静态方法里面可以调用普通方法吗?no!

  1. 调用普通方法,就要用对象的引用
  1. 而静态方法的使用是直接使用类,不需要创建对象
  1. 所以静态方法里不能使用普通方法

四、封装


其实上面关于类主要也就是讲了类的实现和类的调用。如果我们以后使用了别人实现的类,结果后来别人修改了里面的某个变量名。人傻了?我们要一个一个修改原有的变量名吗?

因此出现了一种方法叫做:封装

封装的本质就是让类的调用者不必太多了解类的实现者是如何实现类的,只要知道如何使用就行

1. private 实现封装

private / public 这两个关键字表示访问权限控制

  • 被 public 修饰的成员变量或者成员方法,可以直接被类的调用者使用
  • 被 private 修饰的成员变量或者方法,不能直接被类的调用者使用

如果我们使用 public 修饰,那么类的实现的代码被修改了,可能你创建的代码就要花很多精力去维护。因此在实际中,我们一般用 private,至于 public 的使用要视情况而定,并且最好一个类只提供一个必要的 public 方法

让我们看一个代码更好的理解上述意思

class Person{

private int age = 13;

private String name = “ZhangSan”;

public void show(){

System.out.println("name = "+name + " age = "+age);

}

}

}

public class Main{

public static void main(String[] args){

Person person = new Person();

person.show();

}

}

// 结果为:name = ZhangSan age = 13

上述代码就是使用了 private 修饰,所以主类里面不可以使用 age 和 name,而当我们要输出它们时,就可以直接使用 show 方法,无论实现 Person 类的函数中的 name 和 age 怎么改变,都可以正常打印。

如果你想获取或者修改这个 private 属性,那么就要用到接下来介绍的 getter / setter 方法

2. getter 和 setter 方法

使用这个方法可以在所创建的类中空白处右击鼠标,选择 Generate,就会出现在这里插入图片描述

然后点击就可以。Getter 是获取这个属性,Setter 是修改这个属性,我们用上述代码示范

class Person{

private double age;

private String name;

// 使用 setter 和 getter 方法

public double getAge() {

return age;

}

public void setAge(double age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

public class Main{

public static void main(String[] args){

Person person = new Person();

person.setAge(13);

person.setName(“张三”);

double age = getAge();

String name = getName();

System.out.println(“姓名:” + name + " 年龄:" + age);

}

}

// 打印结果为:姓名:张三 年龄:13

注意

大家有注意没,上述 setter 方法的代码

public void setAge(double age) {

this.age = age;

}

其中 this 是啥,为啥要用它呢?首先其实这份代码可以改成这样

public void setAge(double Myage) {

age = Myage;

}

其中我将形参修改了,反正 Myage 就表示我要修改成的值,如果我不修改,直接这样可以吗

public void setAge(double age) {

age = age;

}

应该不行对吧,因为此时的 age 就表示该方法里面的了,不能将对象的值进行修改。所以为我们此时引入 this

this 表示当前对象的引用

五、构造方法


我们要知道,使用对象时,new 执行了两个过程

  1. 为对象分配内存
  1. 调用对象的构造方法

第二点的构造方法是啥???其实我们上述代码都都用到啦!

因为如果你自己没有创建构造方法的话,编译器会默认提供一个不带参数的构造方法

那什么又是不带参数的构造方法呢?

1. 基本语法

首先我们要知道构造方法的语法规则

  • 方法名必须与类名相同
  • 构造方法没有返回值
  • 每一个类中至少定义一个构造方法(没有明确定义,系统会自动生成一个无参构造,如果自己定义了,默认构造将不再生成)

我们来看一个构造无参的构造方法吧!

class Person{

private double age;

private String name;

public Person(){

System.out.println(“这是一个无参的构造方法”);

}

}

public class Main{

public static void main(String[] args){

Person person = new Person();

}

}

// 结果为:这是一个无参的构造方法

既然有无参数的,那么也有有参数的

class Person{

private double age;

private String name;

public Person(){

System.out.println(“这是一个无参的构造方法”);

}

public Person(double age, String name){

this.age = age;

this.name = name;

System.out.println(“这是一个有参的构造方法”);

}

public void show(){

System.out.println("name: “+name+” age: "+age);

}

}

public class Main{

public static void main(String[] args){

Person person1 = new Person();

Person person2 = new Person(13, “张三”);

person2.show();

}

}

// 结果为:

// 这是一个无参的构造方法

// 这是一个有参的构造方法

// name:张三 age:13

小结

  • 构造方法不仅仅可以构造对象,同时也可以帮助我们进行成员变量的初始化
  • 上述代码里面的构造方法其实构成了重载(方法名相同、参数列表不同、返回值不做要求)

2. this 关键字

其实上面已经讲了 this,但是大家要格外注意,this 是表示当前对象的引用(注意不是当前对象)原因如下

对象的形成要经过两步:1. 为对象分配内存 2. 调用合适的构造方法

而我们使用 this 时,其实我们已经完成了内存的分配,但我们并没有完成构造方法的调用,所以此时还不能说创建了对象,只是将对象的地址得到了,也就是对象的引用

this 的用法

  • this.成员变量:调用成员变量
  • this.成员方法:调用成员方法
  • this() :调用其他的构造方法

其中调用成员变量我们上面用了很多了,接下来我们先看下调用成员方法吧!

class Person{

private double age;

private String name;

public Person(double age, String name){

this.age = age;

this.name = name;

System.out.println(“这是一个有参的构造方法”);

}

public void show(){

System.out.println("name: “+name+” age: "+age);

this.eat();

}

public void eat(){

System.out.println(“吃饭”);

}

}

public class Main{

public static void main(String[] args){

Person person = new Person(13, “张三”);

person.show();

}

}

// 结果为:

// 这是一个有参的构造方法

// name:张三 age:13

// 吃饭

上述代码的 show 方法中就用到了 this 调用成员方法。接下来我们再看看怎么调用其他构造的方法

class Person{

private double age;

private String name;

public Person(){

this(15, “李四”);

System.out.println(“这是一个无参的构造方法”);

}

public Person(double age, String name){

this.age = age;

this.name = name;

System.out.println(“这是一个有参的构造方法”);

}

public void show(){

System.out.println("name: “+name+” age: "+age);

}

}

public class Main{

public static void main(String[] args){

Person person = new Person();

person.show();

}

}

// 结果为:

// 这是一个有参的构造方法

// 这是一个无参的构造方法

// name:李四 age:15

大家看结果,自己思考下执行的顺序

注意

  • 使用 this() 调用构造函数,必须放在第一行
  • 不能在静态方法中使用

六、认识代码块


1. 什么是代码块

代码块就是

使用 {} 定义的一段代码

根据代码块定义的位置以及关键字,可以分为四种

  • 本地代码块
  • 实例代码块(也叫构造代码块)
  • 静态代码块
  • 同步代码块(这个先不讲,俺也不会)

2. 本地代码块

本地代码块是定义在方法中,比如

public class Main{

public static void main(String[] args) {

{

int x = 10 ;

System.out.println("x1 = " +x);

}

int x = 100 ;

System.out.println("x2 = " +x);

}

}

这个在 C 语言里也见过,但几乎没用过

3. 实例代码块

构造代码块是定义在类中(且不加修饰符)

一般用于初始化实例成员变量

class Person{

private double age;

private String name;

public Person(){

System.out.println(“这是一个无参的构造方法”);

}

// 实例代码块

{

this.name = “Yb”;

this.age = 15;

System.out.println(“实例代码块”);

}

}

public class Main{

public static void main(String[] args){

Person person = new Person();

}

}

4. 静态代码块

静态代码块是定义在类中(且加上 static 修饰)

一般用于初始化静态成员属性和需要提前准备的一些数据

class Person{

private double age;

private String name;

public Person(){

System.out.println(“这是一个无参的构造方法”);

}

// 实例代码块

{

this.name = “Yb”;

this.age = 15;

System.out.println(“实例代码块”);

}

// 静态代码块

static{

// 不能用 this

// this.age = 15; 会报错

System.out.println(“静态代码块”);

}

}

public class Main{

public static void main(String[] args){

Person person1 = new Person();

Person person2 = new Person();

}

}

// 结果为:

/**

静态代码块

实例代码块

这是一个无参的构造函数

实例代码块

这是一个无参的构造函数

*/

注意:上述代码的打印结果,是先实行静态代码块,再实行实例代码块,最后才执行构造函数,并且在同一个类中,静态代码块不管生成多少对象,只会执行一次

七、补充说明


1. toString 方法

其实上面已经讲到了,重写 object 的 toString 方法,将对象自动转换成字符串,因此不需要使用 show 方法去查看对象的参数

因此这里就再重述一些知识点

  • toString 方法会在使用 println 的时候被自动调用
  • 将对象转换成字符串这样的操作叫做序列化
  • toString 使 Object 提供的方法,我们自己创建的 Person 类默认继承了 Object 类,可以重写 toString 方法实现我们自己的版本
  • @Override 在 Java 中称为注释,上述代码中的 @Override 表示下面实现的 tostring 方法使重写了父类的方法

2. 匿名对象

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

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

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

18年进入阿里一直到现在。**

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-MCrMMtUM-1712684502781)]
[外链图片转存中…(img-fePOHOXT-1712684502781)]
[外链图片转存中…(img-9MNHZhU1-1712684502782)]
[外链图片转存中…(img-bTKj9fb9-1712684502782)]
[外链图片转存中…(img-bUOWfmKr-1712684502782)]
[外链图片转存中…(img-on6YcNjl-1712684502783)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

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

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-Ev6rIBLo-1712684502783)]

最后

文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-LU04Ryid-1712684502784)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值