初始Java对象

本文的概述顺序

1什么是面向对象编程(面向对象编程与 面向过程编程的区别)

2类和对象的的关系

3类的定义

4对象的创建

5对象使用的一些细节

5.1对象在内存中的产生及分布

5.2两个对象使用同一个方法的内存分布情况

5.3两个应用指向同一个对象

5.4使用对象作为参数

5.5使用对象作为返回值

6类的封装性(介绍private 关键字与this关键字)

7构造方法

8标准代码--JavaBean

1什么是面向对象编程(面向对象编程与 面向过程编程的区别)

生活中举例

1面向对象编程:当你要实现一个功能的时候,不关心具体步骤,而是找一个已经具备该功能的人来帮我做

2面向过程编程:当你要实现一个功能的时候,每一个环节都亲历亲为,详细处理每一个细节

就拿我们生活中最为常见的点外卖举例

面向过程编程:我-》打车-》去店里-》下单-》等待-》取单-》打车回家

面向外卖编程:我-》点外卖

即红色的部分都由外卖小哥这一个对象来解决,不需要我参与,这就是面向对象编程的好处

java代码举例(以输出数组内容举例)

 public class Test {
public static void main(String[] args) {
int[] arr={1,2,3,4,5} ;
//面向过程
System.out.println("面向过程编程");
System.out.print('[');
for (int i = 0; i < arr.length; i++) {
if(i!=0){
System.out.print(","+arr[i]);
}
else{
System.out.print(arr[i]);
}
}
System.out.println("]");
//面向过程
System.out.println("====================");
System.out.println("面向对象编程");
System.out.println(Arrays.toString(arr)); }
}

结果可见,两者的输出结果是相同的。但是使用面向对象编程大大的方便了我们编写代码

面向对象编程思想的好处:将复杂的事情简单化,把我们从执行者变成了指挥者

面向对象有四大基本特征:抽象,封装,多态,继承,我后面会撰写文章概述,在本章中我会先介绍封装

2类和对象的的关系

什么是类?

类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该
类事物。
现实中,描述一类事物:
属性:就是该事物的状态信息。
行为:就是该事物能够做什么。

什么是对象?

对象:是一类事物的具体体现。对象是类的一个实例,必然具备该类事物的属性和行为。
我们拿最近刷爆抖音的爱心鸡蛋早餐来举例子(单身狗自己烤),这个烤鸡蛋的模板就是一个类,而使用这个烤鸡蛋爱心
模具烤出来的一个个心型的爱心鸡蛋就是一个个对象

由此我们可以总结出对象与类的对应关系

类是对一类事务的描述,是抽象的

对象是具体的实例,是具体的(即一个个心型烤鸡蛋)

类是对象的模板,对象的类的实例

3类的定义

比如定义一个鸡蛋类

首先我们来复习一下前面提到的属性和行为

属性:就是该事物的状态信息。
行为:就是该事物能够做什么。
这个类的属性就是  size,weight 方法就是:cook() eat();
 
 public class egg {
int size;//大小
int weight;//重量
//烤鸡蛋方法
public void cook(){
System.out.println("烤鸡蛋啦!!!");
}
//吃鸡蛋方法
public void eat(){
System.out.println("吃鸡蛋啦!!!");
} }

4对象的创建

创建对象的格式

类名  对象名=new 类名();

egg eggone = new egg();

对象方法与属性的调用

对象名.属性值

对象名.方法名

public class Main {
public static void main(String[] args) {
egg eggone = new egg();
eggone.size=100;
eggone.weight=100;
eggone.cook();
eggone.eat(); }
}

5对象使用的一些细节

仍然以之前的egg对象来举例

public class egg {
int size;//大小
int weight;//重量
//烤鸡蛋方法
public void cook(){
System.out.println("烤鸡蛋啦!!!");
}
//吃鸡蛋方法
public void eat(){
System.out.println("吃鸡蛋啦!!!");
} }
ublic class Main {
public static void main(String[] args) {
egg eggone = new egg();
eggone.size=100;
eggone.weight=100;
eggone.cook();
eggone.eat(); }
}

5.1对象在内存中的产生及分布

需要注意的点

堆中new对象中的方法存储的是地址值,通过地址值去找方法,有效的节省了空间

接下来将语句的执行步骤及出栈入栈的相关知识

对象要调用方法首先要通过图中黑色的线找到该对象在堆中的位置,再通过堆中存储的地址值找到方法区中存储的

方法,然后将该方法入栈执行

图中的1,2,3表示栈中的方法的出栈顺序,即在栈顶的方法先出栈(学过数据结构的同学理解起来应该会很简单)

5.2两个对象使用同一个方法的内存分布情况

5.3两个引用指向同一个对象

两个引用指向同一个对象与数组的情况基本相似,这里不做赘述,需要的可以去看完数组的那篇文章

链接点击链接跳转

5.4使用对象作为参数

package cn.itcast;

public class Main {
public static void main(String[] args) {
egg eggone = new egg();
eggone.size=100;
eggone.weight=100;
print(eggone);
}
public static void print(egg eggone){
System.out.println("鸡蛋大小是:"+eggone.size);
System.out.println("鸡蛋的重量是:"+eggone.weight);
} }

结果

5.5使用对象作为返回值

public class Main {
public static void main(String[] args) {
egg eggone=createegg();
System.out.println("鸡蛋的大小:"+eggone.size);
System.out.println("鸡蛋的重量:"+eggone.weight);
}
public static egg createegg(){
egg eggone=new egg();
eggone.size=100;
eggone.weight=100;
return eggone;
} }

结果

6类的封装性(介绍private 关键字与this关键字)

什么是类的封装性?

就是把该隐藏的隐藏起来,把该暴露的暴露出来。

封装的优越性

  1. 封装可以隐藏实现的细节
  2. 让使用者只能通过实现写好的访问方法来访问这些字段,这样一来我们只需要在这些方法中增加逻辑控制,限制对数据的不合理访问、
  3. 方便数据检查,有利于于保护对象信息的完整性
  4. 便于修改,提高代码的可维护性

private关键字的介绍

1. private是一个权限修饰符,是java中的最小权限修饰符
2. 可以修饰成员方法与成变量
3. 被private修饰的成员方法与变量只可以在本类中被访问

使用private方法修饰的变量需要添加该变量的set和get方法

下面用一段代码来演示,在代码中我们加入了对age参数的限制,这也是使用封装的一大原因所在

package cn.itcast;
class Main2{
public static void main(String[] args) {
Person person = new Person();
Person person1 = new Person();
person.setAge(100);
person.setName("zhangsan");
System.out.println(person.getName());
System.out.println(person.getAge());
person1.setName("lisi");
person1.setAge(-10);
System.out.println(person1.getName());
System.out.println(person1.getAge());
}
} class Person {
private int age;
private String name; public int getAge() {
return age;
} public void setAge(int age) {
if (age<0){
System.out.println("年龄不合法");
}
else{
this.age = age;
} } public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

this关键字介绍

为什么使用this关键字?为了解决方法的重名问题,如图标红色的变量名,当传入的变量名与成员变量冲突时使用

 class Person {
private int age;
private String name; public int getAge() {
return age;
}
public void setAge(int age) {
if (age<0){
System.out.println("年龄不合法");
}
else{
this.age = age;
} } public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

this的含义

表示当前所在类的当前对象的引用,即调用该方法的对象

this使用格式

this.变量名

7构造方法

当一个对象被创建时调用构造方法初始化该对象

这里肯定有读者就会问我之前创建的类也没有写啥构造方法啊!!

这是因为java给我们默认提供了一个无参数的构造方法但是一旦你自己自定义了一个构造方法,java

提供的默认无参构造方法就会失效

构造方法的定义格式

修饰符 构造方法名(参数列表){
// 方法体
}

下面我们用一段代码来带领大家开启构造方法

package cn.itcast;
class Main2{
public static void main(String[] args) {
Person person = new Person(18, "姚明");
System.out.println("名字:"+person.getName());
System.out.println("年龄:"+person.getAge());
}
} class Person {
private int age;
private String name; public Person(int age, String name) {
this.age = age;
this.name = name;
} public int getAge() {
return age;
}
public void setAge(int age) {
if (age<0){
System.out.println("年龄不合法");
}
else{
this.age = age;
} } public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

结果

由结果可见我们在初始化的时候已经给了该对象的属性赋值了,这就是构造方法的好处,构造方法中的参数由自己自行决定

注意事项

当你自己定义了构造方法之后,系统默认的构造方法自动失效,如果此时你还要使用无参构造,可以自行定义无参的构造

8JavaBean

什么是JavaBean?

JavaBean 是 Java语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无
参数的构造方法,提供用来操作成员变量的 set 和 get 方法。

下面我来写一段标准的符合JavaBean规范的代码

class Person {
private int age;
private String name;
public Person() {
}
public Person(int age, String name) {
this.age = age;
this.name = name;
} public int getAge() {
return age;
}
public void setAge(int age) {
if (age<0){
System.out.println("年龄不合法");
}
else{
this.age = age;
} } public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

以上就是我觉得有关java对象的一些基本的知识点,如果由错误还请大家批评指正

转载请标明链接

博客:https://www.cnblogs.com/pjhaymy

初识Java对象的更多相关文章

  1. 初识Java

    Java是一种简单的.面向对象的.分布式的.解释的.安全的.可移植的.性能优异的多线程语言.它以极强的安全性.平台无关性.硬件结构无关性.语言简洁.面向对象的特点,在网络编程语言中占据了无可比拟的优势 ...

  2. SSH 框架学习之初识Java中的Action、Dao、Service、Model-收藏

    SSH 框架学习之初识Java中的Action.Dao.Service.Model-----------------------------学到就要查,自己动手动脑!!!   基础知识目前不够,有感性 ...

  3. Java 面向对象编程——第一章 初识Java

      第一章    初识Java 1.  什么是Java? Java是一种简单的.面向对象的.分布式的.解释的.安全的.可移植的.性能优异的多线程语言.它以其强安全性.平台无关性.硬件结构无关性.语言简 ...

  4. Java学习笔记心得——初识Java

    初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开 ...

  5. 初识JAVA语言

    推荐阅读:  我的CSDN  我的博客园  QQ群:704621321 前言        很多游戏开发者可能会有疑问,你会C#,JS,TS,为什么还要初识JAVA呢?有人可能会说,多学点对自己有好处 ...

  6. 初识Java Java基础知识

    今天给大家带来的是初级Java基础部分的知识:包括初识Java.变量.常量.数据类型.运算符.各种选择结构.循环结构.数组等Java的基础语法部分!!!内容.步骤超详细,附有各种案例的源代码(可以直接 ...

  7. Java对象序列化剖析

    对象序列化的目的 1)希望将Java对象持久化在文件中 2)将Java对象用于网络传输 实现方式 如果希望一个类的对象可以被序列化/反序列化,那该类必须实现java.io.Serializable接口 ...

  8. 通过JAXB完成Java对象与XML之间的转换

    Java对象转换XML的过程叫marshal. XML转换到Java对象的过程叫unmarshal. 一.Java对象转化为XML 这里省略getter和setter方法 通过标注@XMLRootEl ...

  9. json相关类库,java对象与json相互转换

    有效选择七个关于Java的JSON开源类库 转自:http://www.open-open.com/lib/view/open1397870197828.html 翻译: (英语原文:http://w ...

随机推荐

  1. PytorchMNIST(使用Pytorch进行MNIST字符集识别任务)

    都说MNIST相当于机器学习界的Hello World.最近加入实验室,导师给我们安排了一个任务,但是我才刚刚入门呐!!没办法,只能从最基本的学起. Pytorch是一套开源的深度学习张量库.或者我倾 ...

  2. Android学习笔记显示和隐藏ActionBar

    要在应用中使用ActionBar 需要android:minSdkVersion:11以上,现在基本都可以用了 创建Android项目如果不做特殊设置默认都带有ActionBar 如果不想要Actio ...

  3. 【JMeter_05】创建第一个简单的接口脚本

    聚合数据:提供了很多开放的API,可以去练习使用https://www.juhe.cn/ 如果有小伙伴对HTTP协议不是很了解,可以看下这里 http://home.ustc.edu.cn/~xie1 ...

  4. git 本机链接多库配置

    git config --list 查看所有配置 // 提交时读取用户名称及邮箱优先级 --local > --global > --system // 全局配置用户名称及邮箱 git c ...

  5. webpack简单笔记

    本文简单记录学习webpack3.0的笔记,已备日后查阅.节省查阅文档时间 安装 可以使用npm安装 //全局安装 npm install -g webpack //安装到项目目录 npm insta ...

  6. DataOutputStream是用来处理什么类型数据的

    FileOutputStream f=new FileOutputStream(new File("sa.txt")); DataOutputStream do=new DataO ...

  7. 使用json-server与Mockjs搭建模拟服务

    为什么使用 在项目开发中,常常需要边写前端页面边写后端接口,但是后端接口服务往往是滞后于前端开发的,或者是不能及时提供的.出于前端开发的迅速和便捷去考虑,我们可以根据后端接口数据结构去模拟(mock) ...

  8. 呼~~~~--历时几个星期终于搞好了HTTPS协议---阿里云

    打开网站加入阿里云官网 https://yundun.console.aliyun.com/?p=cas#/overview/cn-hangzhou 登陆查看自己的证书 没有点击购买证书 -- 选中对 ...

  9. Java 数组最佳指南,快收藏让它吃灰

    两年前,我甚至写过一篇文章,吐槽数组在 Java 中挺鸡肋的,因为有 List 谁用数组啊,现在想想那时候的自己好幼稚,好可笑.因为我只看到了表面现象,实际上呢,List 的内部仍然是通过数组实现的, ...

  10. swift对象存储安装

    对象存储服务概览 OpenStack对象存储是一个多租户的对象存储系统,它支持大规模扩展,可以以低成本来管理大型的非结构化数据,通过RESTful HTTP 应用程序接口. 它包含下列组件: 代理服务 ...