类和对象

  • 什么是面向对象,什么是面向过程
    • 面向对象概念
    • 面向对象设计
  • 正文开始类的创建以及实例化
  • 怎么使用这个类
    • 扩展
      • 介绍null
    • 字段/属性/成员变量
    • 字段就地初始化
    • 方法
  • static 在类中的使用
    • 修饰属性
    • 修饰方法
    • 封装
      • 注意事项
      • 在类内使用方法这一块对外使用接口,
    • main方法为什么要使用static呢?
  • this 的使用
  • 构造方法
  • 代码块
    • 普通代码块
    • 构造代码块
    • 静态代码块
  • 匿名对象
  • 总结
  • 关于小编

首先 什么是类呢?类就是一堆具有相同属性的集合。类就是引用类型。比如,人都有年龄,性别,名字。我们就可以把这个人做成一个类。
那什么又是对象呢?对象不是你媳妇。比如人的年龄,性别,就是对象。他是指我们研究的对象。下面就要进入正题了。

什么是面向对象,什么是面向过程

 面向过程: 1.把冰箱打开 2. 把大象放入 3. 冰箱关起来 面向对象: 打开冰箱,储存,关闭都是对冰箱的操作,是冰箱的行为。冰箱就是一个对象,所以只要操作冰箱所具备的功能,都要定义在冰箱中。

不知以上解释可否满意呢?

面向对象概念

  1. 面向对象是思考问题的一种思考方式,是一种思想。比如:概念与实例。理论与实践。名和实等等。。
  2. 类就是一类对象的统称。对象就是这一类具体化的一个实例。
  3. 面向对象的好处:将复杂的事情变简单了,只要面对一个对象就行。

面向对象设计

面向对象设计把握一个重要的经验:谁拥有数据,谁对外提供操作这些数据(私有)的方法!(被动的一方是数据的拥有者,主动的一方是执行者)
开发时:找对象,建对象,用对象,并维护对象之间的关系。 以后学习过程当中,我们会就这三点进行深入学习。

  说了那么多该来点实际操作了

正文开始类的创建以及实例化

我先拿来一串代码。

class Person {public int age;//成员属性 实例变量public String name;public String sex;public void eat() {//成员方法System.out.println("吃饭!");  }public void sleep() {System.out.println("睡觉!");  }
}

我们要知道。以上代码就是类的创建,创建类的关键字就是class; Person 也就是我们C语言说的结构体(比结构体要牛)也就是自定义类型, public 叫做访问修饰符,也就是我们所说的权限,public 就是公有的,大家都能使用的。那么什么又是实例化类呢?

Person person = new Person();

那么这个就是实例化Person类,
这就是 类的创建和实例化了。

怎么使用这个类

使用 . 来访问对象中的属性和方法.
下面看代码。

class Person {public int age;//成员属性 实例变量public String name;public String sex;public void eat() {//成员方法System.out.println("吃饭!");}public void sleep() {System.out.println("睡觉!");}
}public class Test {public static void main(String[] args) {Person person  = new Person();person.name = "WeiRan";person.sex = "男";person.age = 19; //因为类中 age为int型。所以person.age也是整型,因为我们是用过对象访问的年龄。System.out.println(person.name);System.out.println(person.sex);System.out.println(person.age);}
}

代码有点长,但我相信很好理解。毕竟我在中间也加了注释呢。在这里我们发现可以直接赋值,,简单嘛?简单的很啊,下面我说一下注意事项

  1. new 关键字用于创建一个对象的实例.
  2. 使用 . 来访问对象中的属性和方法.
  3. 同一个类可以创建多个实例.
    对于 同一个类可以创建多个实例. 这句话的理解呢,我们看一个代码;便可以理解
        Person person  = new Person();Person person1  = new Person();Person person2  = new Person();Person person3  = new Person();Person person4 = new Person();

我们可以用这样的方式实现代码,每次new一个便可以在堆区创建一块空间,在这里我要给大家扩展一点

扩展

1 在代码:Person person = new Person(); 中,person在栈区存储 它身上存着一块地址。比如我运行一下。

你们看,运行结果是类名+字符@+地址。当然我们如何解决这个问题呢。比如我们如果想要输出类内的元素
我说下步骤:

  1. 将鼠标光标移动到类内,按住alt+ins键ins也就是我们平常所说的插入键
  2. 他会弹出这样的小框框,我们选择toString();
  3. 我们将其全部选中再点击ok即可,代码将会自动补入。
    做好这一切,我们再运行一遍,看看结果是否满意:


这个结果便是我们想要的了。当然有点小知识:new再堆区开空间,有默认值的,大家可以看我之前写的博客 在这里我就说一下,引用类型默认为null

介绍null

null 在 Java 中为 “空引用”, 表示不引用任何对象. 类似于 C 语言中的空指针. 如果对 null 进行 . 操作就会引发异常.

字段/属性/成员变量

其实我们再类内定义的变量 就被成为 字段,属性,成员变量 我们不强制叫做什么,比如我就喊他元素。

字段就地初始化

什么是就地初始化呢,就是在类内对字段进行初始化。

class Person {public String name = "张三";public int age = 18; }

这就叫就地初始化 当然 我们这样初始化可以理解为在方法内使用时,我们如果是初始化这个类,那么name,age字段就有了初始值

方法

方法就是类内使用方法。大家可以看代码!其实这个知识点特别简单哦

class Person {public int age;//成员属性 实例变量public String name = "Weiran";public String sex;public void eat() {//成员方法System.out.println("吃饭!");}public void sleep() {System.out.println("睡觉!");}@Overridepublic String toString() {return "Person{" +"age=" + age +", name='" + name + '\'' +", sex='" + sex + '\'' +'}';}
}public class Test {public static void main(String[] args) {Person person  = new Person();person.eat();}
}

看这个代码,。其实就是调用类里面的函数,就完了,好了。以上就是 类的基础了。下一个模块就要变的难咯。建议大家看到这里先去练练手,把类吃明白了,再继续看

static 在类中的使用

修饰属性

由上文我相信大家可以知道 属性,字段,成员变量是一个东西。也就是我们类里面的变量。一个类如果是一个集合的话。那么属性/字段就是元素。下面看一遍代码吧,在下将用代码解释所有

class Person{public static int count;public int n;
}

定义方法很简单咯。就是将count定义成静态的整型变量,权限为公开。下面我让你看看他的不同之处在哪里吧

    public static void main(String[] args) {Person p1 = new Person();Person p2 = new Person();p1.count++;p1.n++;System.out.println(p1.count);System.out.println(p1.n);p2.count++;p2.n++;System.out.println(p2.n);System.out.println(p2.count);}

这串代码便是直接使用的上图中的类。大家运行可以发现。静态变量 : p1.count++ 第一次执行的时候从0变成了1 第二次执行则是再 1 的基础上再加。而非静态变量呢。定义一次初始化一次。看到这里 再联想之前的知识。我们就可以发现,在类中普通变量在使用时。则是在不同堆区进行改变。 而 new p2 是 count 使用的还是原来那块空间。当然在这里我就不让大家思考了。我直接说原因了

  1. 首先,类开辟实在堆区,每次new一下就会在堆区再次开辟一个空间
  2. 静态变量存在静态区,count使用时应为类名.count
    看完以上两点是不是就明白了很多了? 既然时类名.count 我们会发现他们似乎就是一样哒。
    当然我们之前使用p1,p1时 我们会发现 编译器会给我们警告的,而换成类名.count 则没有。

    大家看以上两行代码 使用p1.count 带阴影 便是警告。而类名.count 则没有阴影

修饰方法

      如果在任何方法上应用 static 关键字,此方法称为静态方法

看到上面这句话 我们应该就知道上面时静态方法了 下面我给大家介绍几点重点吧

  1. 静态方法属于类,而不属于类的对象。
  2. 可以直接调用静态方法,而无需创建类的实例。
  3. 静态方法可以访问静态数据成员,并可以更改静态数据成员的值。
    对于第一点我们应该怎么理解呢?
    有静态变量,我们发现,静态变量要用类名实现,而不能使用类名new出来的对象实现,所以我们说静态方法属于类,而不属于类的对象。
    那么第二句话呢?我们可以看一个代码

    其实第二句话的意思就是。我们使用静态方法的时候 直接使用类名.方法 即可不需要再new出来一个老婆。再用老婆召唤这个方法了。
    下面开始理解第三句话。
    public static void show(){System.out.println("Hello World!!!");count = 10;}public void exitInt(){count = 20;}

小编建议大家将这一步放到编译器上,交换顺序看打印结果。,我们会发现,count始终等于10;
当然在这里 静态变量不能调用非静态变量的值,

还有一点大家一定要避坑。就是非静态方法不能改变静态变量的值,但是访问并不报错。所以以后如果在这里写错 可是会很头疼的哦!!!

封装

下面我们开始介绍封装,什么叫封装呢?封装就是将数据保存起来,提高java数据的安全型,不让别人看见,

<<代码大全>> 开篇就在讨论一个问题: 软件开发的本质就是对程序复杂程度的管理. 如果一个软件代码复杂程
度太高, 那么就无法继续维护. 如何管理复杂程度? 封装就是最基本的方法.
在我们写代码的时候经常会涉及两种角色: 类的实现者和类的调用者.
封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的, 只要知道如何使用类就行了.
这样就降低了类使用者的学习和使用成本, 从而降低了复杂程度
  1. 被 public 修饰的成员变量或者成员方法, 可以直接被类的调用者使用.
  2. 被 private 修饰的成员变量或者成员方法, 不能被类的调用者使用.
    下面我们开始使用private以及public 当然public我们前面就一直使用 就是公开的,大家都可以用啊
    但是我们如果把这些每个数据都公开了,又谁想用谁用。岂不是一点安全性没有了。
    其实在这里我们主要是会用这些就好啦,我直接用代码表示使用吧。
class Person { private String name = "张三"; private int age = 18; public void show() { System.out.println("我叫" + name + ", 今年" + age + "岁"); }
}
class Test { public static void main(String[] args) { Person person = new Person(); person.show(); }
}

这个代码可以看出。我们的private 修饰完名字和年龄后,再主方法里并不能访问名字和年龄了。只能通过类内的方法进行访问。这样就提高了java语言的安全程度。

注意事项

  1. private 不光能修饰字段, 也能修饰方法
  2. 通常情况下我们会把字段设为 private 属性, 但是方法是否需要设为 public, 就需要视具体情形而定. 一般我们希望一个类只提供 “必要的” public 方法, 而不应该是把所有的方法都无脑设为 public.

在类内使用方法这一块对外使用接口,

这一块我不怎么建议大家使用,因为有很多逻辑上的问题,尤其是对于初学者,这些省事的方法不好,下面我就简单介绍一下省事的方法把。还是alt+ins键之后选择 getter或者setter 然后选择你需要对外使用的接口即可。—再次强调,不建议使用

main方法为什么要使用static呢?

首先我们知道,不用static便需要在main 执行前对main进行开辟空间。而main又是程序首先执行的,我们想想都矛盾啊。是不是,

this 的使用

this有三种方法,下面我介绍一种:看一下代码

    class Person{public  String name;public  void setName(String name){name = name;}}public class Test{public static void main(String[] args) {Person p = new Person();p.setName("Weiran");System.out.println(p.name);}

大家猜猜这一块代码的执行结果是多少呀!! 毫无疑问,是Weiran。哎!!其实没有疑问归没有疑问,对不对看运行结果把!

哇哦最后的结果居然是null 为什么呢? 听我解释把,。是因为局部变量优先。那么我们如何杜绝这个呢?我们在第一个name前面加一个this.即可

大家看 这样就没问题了。在这里,我就不说this的用法了,我相信,只要你比我聪明你就能理解this的用法了。

构造方法

1.如果类中没有提供任何的构造函数,那么编译器会默认生成一个不带有参数的构造函数
2.若类中定义了构造方法,则默认的无参构造将不再生成.
3.构造方法支持重载. 规则和普通方法的重载一致
以上三点给大家介绍,系统会自带一个构造函数,但是,构造函数内什么都没有。而第二点定义构造函数的方法是什么呢?

看到没有,构造函数的使用,实在类实例化的时候就已经执行了滴!!
当然 构造方法也是方法也有参数。那么他就支持重载 这里无需多言。

代码块

普通代码块

普通代码块是定义在方法种的

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); }
}

直接{}的代码那一块就是普通代码块 这种方法很少用,因为用了和没用并没啥区别啊。

构造代码块

构造代码块是在类中,不是构造方法,也叫实例代码块

class Person{ private String name;//实例成员变量private int age; private String sex; public Person() { System.out.println("I am Person init()!"); } //实例代码块{ this.name = "bit"; this.age = 12; this.sex = "man"; System.out.println("I am instance init()!"); } public void show(){ System.out.println("name: "+name+" age: "+age+" sex: "+sex); }
}
public class Main { public static void main(String[] args) { Person p1 = new Person(); p1.show(); }
}

在方法里 构造函数的那一块就是构造代码块。
注意事项: 实例代码块优先于构造函数执行。

静态代码块

 static { count = 10;//只能访问静态数据成员 System.out.println("I am static init()!"); }

就像这样 直接使用static 定义的代码块就是静态代码块!!
静态代码块优先于 实例代码块
其实通过上面的介绍,我相信大家对类与方法这一部分都能有非常深入的理解

匿名对象

匿名只是表示没有名字的对象
注意事项有三点

  1. 没有引用的对象称为匿名对象.
  2. 匿名对象只能在创建对象时使用.
  3. 如果一个对象只是用一次, 后面不需要用了, 可以考虑使用匿名对象.
    下面我直接放一个代码把”
class Person { private String name; private int age; public Person(String name,int age) { this.age = age; this.name = name; } public void show() { System.out.println("name:"+name+" " + "age:"+age); }
}
public class Main { public static void main(String[] args) { new Person("caocao",19).show();//通过匿名对象调用方法}
}

这就是使用了,配上上面的内容我相信大家都能很容易的理解了,

总结

  1. 一个类可以产生无数的对象,类就是模板,对象就是具体的实例。
  2. 类中定义的属性,大概分为几类:类属性,对象属性。其中被static所修饰的数据属性称为类属性, static修饰的
  3. 方法称为类方法,特点是不依赖于对象,我们只需要通过类名就可以调用其属性或者方法。
  4. 静态代码块优先实例代码块执行,实例代码块优先构造函数执行。
  5. this关键字代表的是当前对象的引用。并不是当前对象。

关于小编

小编是一名正在奋斗的大一小骚年,希望能与大家一起学习哦。在编程的路上也希望能有朋友一起学习!!!这篇博客 是小编自己理解的写的,所以,有些地方可能有所不足,忘大家给予指点,错的越多后期越吃香。
小编qq号:2206730228
希望能与大家一起学习哦!!!!!!

java核心之类和对象相关推荐

  1. 31 道 Java 核心面试题,统统打包给你!

    作者 | 沉默王二 来源 | 沉默王二 责编 | 王晓曼 二哥,你好,找工作找了仨月,还没有找到,很焦虑,我该怎么办呢?你那有没有 Java 方面的面试题可以分享一波啊? 以上是读者田田给我发的私信, ...

  2. 深入Java核心 Java中多态的实现机制(1)

    在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...

  3. Java核心知识点 --- 线程中如何创建锁和使用锁 Lock , 设计一个缓存系统

    理论知识很枯燥,但这些都是基本功,学完可能会忘,但等用的时候,会发觉之前的学习是非常有意义的,学习线程就是这样子的. 1.如何创建锁? Lock lock = new ReentrantLock(); ...

  4. 一个很艰难的 Java 核心面试问题!

    一个很艰难的 Java 核心面试问题,这个 Java 问题也常被问: 什么是线程安全的单例,你怎么创建它. 好吧,在Java 5之前的版本, 使用双重检查锁定创建单例 Singleton 时,如果多个 ...

  5. java核心面试_Java核心面试问题

    java核心面试 问:如果main方法被声明为私有该怎么办? 回答: 该程序可以正确编译,但在运行时会显示" Main方法不公开". 信息. 问:在Java中按引用传递和按值传递是 ...

  6. java 转储快照分析_分析Java核心转储

    java 转储快照分析 在本文中,我将向您展示如何调试Java核心文件,以查看导致JVM崩溃的原因. 我将使用在上一篇文章: 生成Java Core Dump中生成的核心文件. 您可以通过以下几种方法 ...

  7. java核心面试_不正确的核心Java面试答案

    java核心面试 总览 在Internet上,Java面试问题和答案从一个网站复制到另一个网站. 这可能意味着错误或过时的答案可能永远不会得到纠正. 这是一些不太正确或已经过时的问题和答案. 即是Ja ...

  8. 分析Java核心转储

    在本文中,我将向您展示如何调试Java核心文件,以查看导致JVM崩溃的原因. 我将使用在上一篇文章: 生成Java Core Dump中生成的核心文件. 您可以通过以下几种方法来诊断JVM崩溃: hs ...

  9. 深入Java核心 Java内存分配原理精讲

    深入Java核心 Java内存分配原理精讲 Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详 ...

最新文章

  1. Nmap扫描教程之DNS服务类
  2. python视频课程推荐-《Python从小白到大牛》全集视频课程介绍
  3. poj 2455 Secret Milking Machine(二分枚举+最大流)
  4. Python简单实现基于VSM的余弦相似度计算
  5. php怎么取request,PHP-如何在Guzzle中获取Request对象?
  6. Qt工作笔记-使用qrand与QTime产生随机数
  7. SpringCloud微服务(04):Turbine组件,实现微服务集群监控
  8. Python3之max key参数学习记录
  9. Oracle 开窗函数--转
  10. hadoop在windows上的环境配置及HDFS API编程示范
  11. python done()什么意思_turtle.done()的作用是什么
  12. 连接mysql失败怎么办_数据库连接失败有什么原因?怎么解决?
  13. 福利最新2022年H3CNE认证网络工程师GB0-191 题库加超详细解析
  14. 两路VL53L0X激光测距传感器的使用
  15. 行测-言语理解与表达-逻辑填空
  16. Select函数的作用和使用
  17. 如何用手机语音助手控制电脑
  18. git commit使用其他人的用户名和邮箱提交代码
  19. 邻接矩阵的理解与应用
  20. FastDFS为什么要用Nginx做代理

热门文章

  1. Makefile文件是什么?(一)
  2. 【奇怪知识点】百事有雪碧吗?
  3. 大家都是在哪些网站找数据?
  4. DM9006 linux driver
  5. 5个步骤,教会企业如何整理有效的常见问题(FAQ)解答页面。运营必看!
  6. QQ(微信)一次性发送多条信息(连续发520遍我爱你)
  7. 浅谈卡尔曼滤波(Kalman Filter)(一)
  8. afn访问本地html,请求接口AFN报错1016,failed:unacceptablecontent-type:text/html解决办法...
  9. Facebook 的开源静态分析工具Infer
  10. CodeForces 14 E.Camels(dp)