初识Java对象
初始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类的定义
比如定义一个鸡蛋类
首先我们来复习一下前面提到的属性和行为
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关键字)
什么是类的封装性?
就是把该隐藏的隐藏起来,把该暴露的暴露出来。
封装的优越性
- 封装可以隐藏实现的细节
- 让使用者只能通过实现写好的访问方法来访问这些字段,这样一来我们只需要在这些方法中增加逻辑控制,限制对数据的不合理访问、
- 方便数据检查,有利于于保护对象信息的完整性
- 便于修改,提高代码的可维护性
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规范的代码
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对象的更多相关文章
- 初识Java
Java是一种简单的.面向对象的.分布式的.解释的.安全的.可移植的.性能优异的多线程语言.它以极强的安全性.平台无关性.硬件结构无关性.语言简洁.面向对象的特点,在网络编程语言中占据了无可比拟的优势 ...
- SSH 框架学习之初识Java中的Action、Dao、Service、Model-收藏
SSH 框架学习之初识Java中的Action.Dao.Service.Model-----------------------------学到就要查,自己动手动脑!!! 基础知识目前不够,有感性 ...
- Java 面向对象编程——第一章 初识Java
第一章 初识Java 1. 什么是Java? Java是一种简单的.面向对象的.分布式的.解释的.安全的.可移植的.性能优异的多线程语言.它以其强安全性.平台无关性.硬件结构无关性.语言简 ...
- Java学习笔记心得——初识Java
初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开 ...
- 初识JAVA语言
推荐阅读: 我的CSDN 我的博客园 QQ群:704621321 前言 很多游戏开发者可能会有疑问,你会C#,JS,TS,为什么还要初识JAVA呢?有人可能会说,多学点对自己有好处 ...
- 初识Java Java基础知识
今天给大家带来的是初级Java基础部分的知识:包括初识Java.变量.常量.数据类型.运算符.各种选择结构.循环结构.数组等Java的基础语法部分!!!内容.步骤超详细,附有各种案例的源代码(可以直接 ...
- Java对象序列化剖析
对象序列化的目的 1)希望将Java对象持久化在文件中 2)将Java对象用于网络传输 实现方式 如果希望一个类的对象可以被序列化/反序列化,那该类必须实现java.io.Serializable接口 ...
- 通过JAXB完成Java对象与XML之间的转换
Java对象转换XML的过程叫marshal. XML转换到Java对象的过程叫unmarshal. 一.Java对象转化为XML 这里省略getter和setter方法 通过标注@XMLRootEl ...
- json相关类库,java对象与json相互转换
有效选择七个关于Java的JSON开源类库 转自:http://www.open-open.com/lib/view/open1397870197828.html 翻译: (英语原文:http://w ...
随机推荐
- cb03a_c++_数据结构_顺序容器_STL_stack
/*cb03a_c++_数据结构_顺序容器_STL_stack堆栈:LIFO--Last In First Out后进先出,用于系统程序设计自适应容器(容器适配器),不是独立的容器,是一个适配器栈适配 ...
- cc31a_demo--CppPrimer_静态成员与继承-在派生类中访问基类中的static成员的方法
//*基类中的static成员,在整个继承层次中只有一个实例 //*在派生类中访问基类中的static成员的方法 //1.基类名::成员名 //2.子类名::成员名 //3.对象.成员名 //4.指针 ...
- 漏洞复现-Office远程代码执行漏洞 (CVE-2017-11882&CVE-2018-0802)
漏洞原理 这两个漏洞本质都是由Office默认安装的公式编辑器(EQNEDT32.EXE)引发的栈溢出漏洞(不要问什么是栈溢出,咱也解释不了/(ㄒoㄒ)/~~) 影响版本 Office 365 Mic ...
- 【K8S学习笔记】初识K8S 及架构组件
K8S是什么?发展历史 Kubernetes (简称 k8s)是 Google 在2014年开源的,对容器生命周期管理的开源平台,致力于对容器集群提供易于管理.高可用.弹性负载与故障转移的能力,提高服 ...
- WeChair项目Beta冲刺(2/10)
团队项目进行情况 1.昨日进展 Beta冲刺第二天 昨日进展: 昨天由于组内成员课程繁重,但是大家还是花时间一起开会谈论了开发的一些细节和交流了一些问题 2.今日安排 前端:扫码占座功能和预约功 ...
- Java并发包JUC核心原理解析
CS-LogN思维导图:记录CS基础 面试题 开源地址:https://github.com/FISHers6/CS-LogN JUC 分类 线程管理 线程池相关类 Executor.Executor ...
- Python 简明教程 --- 17,Python 模块与包
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 正确的判断来源于经验,然而经验来源于错误的判断. -- Fred Brooks 目录 我们已经知道函 ...
- 深度学习“四大名著”发布!Python、TensorFlow、机器学习、深度学习四件套!
Python 程序员深度学习的"四大名著": 这四本书着实很不错!我们都知道现在机器学习.深度学习的资料太多了,面对海量资源,往往陷入到"无从下手"的困惑出境. ...
- Windows高DPI系列控件(一) - 饼图
目录 一.醉一醉 二.效果展示 三.高DPI适配 1.高DPI框架运作 2.适配高DPI 3.适配饼图 四.相关文章 原文链接:Windos高DPI系列控件(一) - 饼图 一.醉一醉 眨眼功夫,20 ...
- Python Java 快速配置环境变量(Path)
Python Java 快速配置环境变量(Path) 最近系统被重置,清空了C盘中的program等文件夹以及初始化了环境变量. 通常环境下,在windows环境中我们都会打开"环境变量&q ...
