学了好长时间的java对于java中的对象一直没有理清楚,今天楼主对java中的对象进行了整理,希望对大家有帮助。

理解和使用java中的对象,我们首先了解一下构造方法与对象的创建。  类是面向对象语言中最重要的一种数据,可以用类声明变量。面向对象语言中,用类声明的变量称为对象。

和基本数据类型不同,在声明对象后,还必须创建对象,即为声明的对象分配所拥有的的变量(确定对象所具有的属性),当时使用一个类创建一个对象时,也叫给出了这个类的一

个实例。通俗的讲,类是创建对象的模板。

1. 构造方法

构造方法是类中的一种特殊方法,用类创建对象时需要使用它的构造方法,类中的构造方法必须和它所在类的名字完全相同,且没有类型。
 
class Person
{
int age;
String name; Person(){ }
}

在Person类中Person()是一个构造函数,其实这个方法是被java隐藏的,也就是说如果类中没有编写构造方法,系统会默认该类有一个无参数,且方法体中没有语句的构造函数。如

Person类中的Person(){ },如果类里定义了一个或多个构造函数,那么java就不提供默认的构造方法了。如下:

class Person
{
int age;
String name; Person(){
age=22;
name="刘德华";
} Person(int age,Stirng name){
System.out.println("the man age is"+age+"name: "+name);
}
}

2 创建对象

(1)对象声明
一般格式为:
 
类的名字   对象的名字;
如:
Person person;
 
(2)为声明的对象分配变量
1.使用new运算符和类的默认构造方法为声明的对象分配变量,即创建对象。

class Person
{
int age;
String name;
void speak(String name){
System.out.println(name);
}
}
public class OuXiang
{
public static void main(String[] args) {
Person liudehua; //声明对象
liudehua=new Person(); //为变量分配变量(使用new和默认的构造方法)
}
}

2.使用new运算符和类的构造方法为声明的对象分配变量,即创建对象。

class Person
{
int age;
String name; Person(int age,Stirng name){
System.out.println("the man age is"+age+"name: "+name);
} void speak(String name){
System.out.println(name);
}
}
public class OuXiang
{
public static void main(String[] args) {
Person liudehua; //声明对象
liudehua=new Person(53,"刘德华"); //为变量分配变量(使用new和类中的构造方法)
}
}

3 对象的内存模型

当用Person类声明变量liudehua,即对象liudehua时,Person liudehua; 内存模型如下
 
liudehua
null
声明变量后,liudehua的内存中还没有任何数据,这时的liudehua还是一个空对象,对象还不能使用,因为他还没有实体,必须为之分配变量,即为对象分配实体。
 
liudehua=new Person(53,"刘德华"); 此时就为对象分配了变量。
new运算符为变量age,name分配内存后,将返回一个引用给对象变量liudehua,也就是返回上图中0xAC12(相当于一个身份id)该引用包含代表着成员变量内存位置及相关重要信
 
息。

【转】java对象——new对象的理解的更多相关文章

  1. 对Java“一切皆对象”的理念的理解

    在从HelloWorld到面向对象中,我们将int, float, double, boolean等称为基本类型(primitive type),也就是特殊的类.我们可以将一个整数理解称为一个int类 ...

  2. 理解Java中的对象,变量和方法

    1.对象的创建和销毁 1.1 对象的创建 这里只介绍创建对象与构造方法的关系 (1).每实例化一个对象就会自动调用一次构造方法,实质上这个过程就是创建对象的过程,准确的说,在Java语言中使用new操 ...

  3. 深入Java虚拟机--判断对象存活状态

    程序计数器,虚拟机栈和本地方法栈 首先我们先来看下垃圾回收中不会管理到的内存区域,在Java虚拟机的运行时数据区我们可以看到,程序计数器,虚拟机栈,本地方法栈这三个地方是比较特别的.这个三个部分的特点 ...

  4. 浅谈Java中的对象和引用

    浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...

  5. 解析Java类和对象的初始化过程

    类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来 ...

  6. JVM调优-Java中的对象

    Java对象的大小 基本数据的类型的大小是固定的,这里不做详细说明.对于非基本类型的Java对象,其大小就值得商榷. 在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没 ...

  7. Java数据类型和对象的引用

    在Java中,变量分为两类: 1.基本类型变量,java是传递的副本 2.一切对象型变量,传引用副本的实质是复制指向地址的指针 a.基本类型引用 public class BasicTransmit ...

  8. Java I/O 对象序列化

    我们知道对象的持持久化有三种方式: 1: 对象序列化 2: XML 3: 数据库技术 序列化可以帮助使得对象的生命周期不取决与程序是否正在执行,它可以生存于程序的调用之间. 只要将任何对象序列化到单一 ...

  9. Java中String对象的不可变性

    首先看一个程序 package reverse; public class Reverse { public static void main(String[] args) { String c1=n ...

随机推荐

  1. B站papi酱、陈一发、李云龙

    李云龙-花田错 https://www.bilibili.com/video/av10842071/?from=timeline&isappinstalled=1 李云龙:你猜旅长怎么说? h ...

  2. XCTFreverse第一道DMD

    MD5解一次密即可

  3. 当传入数据只有一个时mybatis中<if>判断会出现There is no getter for property named 'subjectId' in 'class java.lang.Intege

    用"_parameter"代替当前参数 正确: <select id="selectSubjectByPId" parameterType="j ...

  4. myBatis学习笔记(10)——使用拦截器实现分页查询

    1. Page package com.sm.model; import java.util.List; public class Page<T> { public static fina ...

  5. 将一个文件从gbk编码转换为utf8编码

    用django展示模板时,出现如下错误: 'utf8' codec can't decode byte 0xd3 in position 197: invalid continuation byte ...

  6. 图片异步载入之 Android-Universal-Image-Loader

    今天在做项目的时候用了之前写的图片载入类.尽管也能实现缓存什么的.可是在载入大图的时候非常慢非常慢.于是上网找解决方式,准备优化一下,无意中发现了Android-Universal-Image-Loa ...

  7. javaproject积累——树形结构的操作

    近期一直被树形结构整的非常头大,又是递归.又是循环.可是,好在我们在经历了千辛万苦后.最终弄出来了.事实上就是组织机构的常规操作,有些是我们过度设计.有些是我们想错了.而对数的逻辑读取,我们就属于想错 ...

  8. memchached你知道和不知道的事

  9. 全国省市区三级联动js

    function Dsy(){ this.Items = {}; } Dsy.prototype.add = function(id,iArray){ this.Items[id] = iArray; ...

  10. MVC上传文件并模拟进度条

    进度条样式和JS <style type="text/css"> .spa { font-size: 12px; color: #0066ff; } .put { fo ...