初识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 ...
随机推荐
- Redis系列(四):数据结构String类型中基本操作命令和源码解析
1.介绍 string类型本质上是char[]数组的封装 中文网:http://www.redis.cn/commands.html#string 2.常用命令 set 命令 set命令的时间复杂 ...
- 开启PG的归档模式
目录 开启PG的归档模式 1.查看pg的数据目录 2.查看pg的归档情况 3.查看归档的模式和位置 4.建立归档目录 5.配置归档参数 6.重启pg 7.查看&&切换归档日志 8.查看 ...
- html/css 滚动到元素位置,显示加载动画
每次滚动到元素时,都显示加载动画,如何添加? 元素添加初始参数 以上图中的动画为例,添加俩个左右容器,将内容放置在容器内部. 添加初始数据,默认透明度0.左右分别移动100px. //左侧容器 .it ...
- 【转】Windows下PATH等环境变量详解
[转]“肖凡的专栏” 博客,请务必保留此出处http://legend2011.blog.51cto.com/3018495/553255 在学习JAVA的过程中,涉及到多个环境变量(environm ...
- zip矩阵转至
list01=[1,2,3,4] list02=["a","b","c","d"] for itme in zip(li ...
- APP移动端测试
重点: app测试的内容 add 命令 monkey命令 次重点:模拟器的安装 雷电 夜神 android 自带的模拟器 真机测试 简单了解云测Testing 腾讯云() 了解:市场有点移动端的操 ...
- 代码规范与计划(Beta阶段)
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 团队名称 WeChair 这个作业要求在哪里 Beta冲刺 这个作业的目标 代码规范与计划 作业正文 如下 其他参考文献 代码规 ...
- python基础扩展(二)
python基础扩展(二) 常用操作 1.startswith(以什么开始) endswith(y)什么结束 s='taiWanw39dd' print(s.startswith('t')) #意思是 ...
- Python实用笔记 (10)高级特性——生成器
通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素 ...
- mybatis源码配置文件解析之五:解析mappers标签流程图
前面几篇博客分析了mybatis解析mappers标签的过程,主要分为解析package和mapper子标签.补充一张解析的总体过程流程图,画的不好,多多谅解,感谢.
