No1_8.类和对象2_Java学习笔记_对象
对象
/****
* *一、对象
*1.概念:对象是由类抽象出来的,对象可以操作类的属性和方法解决问题,了解对象的创建、操作和消亡很必要;
*2.对象的创建:
* a. new操作符创建;每实例化一个对象就会自动调用一次构造方法;
* 即:在Java语方中使用new操作调用构造方法创建对象;
* b.Test[类] test[类对象]=new[操作符] Test("a"[构造方法的参数]);
* c.对象创建时,在内存中为对象分配内存空间,初始化成员变量;
* d.每个对象都是相互独立的,在内存中占用独立的内存地址,有自己的生命周期,周期结束对象变成垃圾,虚拟机自动回收;
*3.访问对象的属性和行为:
* a.对象.类成员 获取;
* b.如果希望成员变量随其中任何一个对象改变,用static关键字;(一个static的成员变量的值可以被本类或其它类的对象共享)
*4.对象的引用
* a.语法格式:类名对象引用名称 Book book
* b.通常一个引用不一定需要有一个对象相关联,引用与对象相关联的语法: Book book=new Book();
* c.引用只是存放一个对象的内存地址,并非存放一个对象;
*5.对象的比较
* a.两种比较方式 ,“==”与 equals() 方法
* b.区别:equals()方法比较两对象引用所指的内容是否相等;==比较的是两对象引用的地址是否相等;
*6.对象的销毁
* a.每个对象都有生命周期,当对象的生命周期结束时,分配给对象的内存地址将会被回收;
* b.Java拥有垃圾回收机制,用户不用担心对象占用内存;
* c.两种情况会被Java虚拟机视为垃圾;
* @对象引用超过其作用范围;
* @将对象赋值为null;
* d.垃圾回收只能回收那些由new操作符创建的对象;非new创建的,在内存获取的内存区域,不被识别;
* e.finalize()方法,是Object类的protected方法,垃圾回收时首先调用该方法,下一次垃圾回收动作发生时,才回收对象占用的内存。
* f.垃圾回收或是finalize()方法不保证一定会发生,虚拟机面临内存损耗待尽的形况,不执行垃圾回收;
* g.垃圾回收执行时间不确定,finalize()方法也就无法执行,为此Java提供了System.gc()方法强制启动垃圾回收器;
*7.单例模式
* a.所谓单例模式就是一个类有且只有一个实例;独一无二~
*/
练习:
1 import java.util.Random;
2
3 public class HelloClassObject2 {
4 static int i=77; //类的成员变量 如果变量i声明成static类型,可以被本类或其它类的对象共享,会跟着变
5
6 public static void main(String[] args) {
7 // TODO Auto-generated method stub
8 //对象的创建
9 System.out.println("**对象的创建");
10 new HelloClassObject2();
11 HelloClassObject2 co1 =new HelloClassObject2();
12 HelloClassObject2 co2=new HelloClassObject2();
13 System.out.println("比较对象内存地址(co1==co2):"+(co1==co2));
14
15 //访问对象的属性和行为
16 System.out.println("\n**访问对象的属性和行为");
17 co2.i=60;
18 //使用第一个对象调用类成员变量
19 System.out.println("第一个实例对象调用变量i的结果:"+co1.i++);
20 co1.call();
21 //使用第二个对象调用类成员变量
22 System.out.println("第二个实例对象调用变量i的结果:"+co2.i);
23 co2.call();
24
25 //对象的比较
26 //equals()方法比较两对象引用所指的内容是否相等;==比较的是两对象引用的地址是否相等
27 System.out.println("**对象的比较");
28 String s1=new String("abc");
29 String s2=new String("abc");
30 String s3=s1;
31 System.out.println("s1==s3的运算结果为:"+(s2==s3));
32 System.out.println("s2.equals(s3)的运算结果为:"+s2.equals(s3));
33
34 //范例:统计图书销量
35 System.out.println("\n**范例:统计图书销量");
36 String[] titles={"《幻城》","《1988我想和这个世界谈谈》","《那小子真帅》"};
37 for( int i=0;i<5;i++){
38 new Book(titles[new Random().nextInt(3)]);
39 }
40 System.out.println("总计销售了"+Book.getCount()+"本书!");
41
42 //经典:汉诺塔问题求解
43 System.out.println("\n**汉诺塔方法,难难难!!没继续研究下去!");
44 int nDisks=3;
45 moveDish(nDisks,'A','B','C');
46
47 //单例模式:皇帝
48 //Emperor ep=new Emperor(); 构造方法不允许访问的
49 System.out.println("\n**单例模式");
50 Emperor hd=Emperor.getInstance();
51 Emperor hd2=Emperor.getInstance();
52 hd.getName();
53 System.out.println("比较对象内容hd.equals(hd2):"+hd.equals(hd2)); //对象内容
54 System.out.println("比较对象内存地址(hd==hd2):"+(hd==hd2)); //存储地址
55 }
56
57 //构造方法
58 public HelloClassObject2(){
59 System.out.println("构造方法自动调用");
60 }
61
62 //call方法
63 public void call(){
64 System.out.println("调用call()方法");
65 for(i=0;i<3;i++){ //如果int i=0 的话,与类成员变量i就不是同一个变量了
66 System.out.print(i+" ");
67 if(i==2){
68 System.out.println("\n");
69 }
70 }
71 }
72 //call方法结束
73
74 //汉诺塔方法,利用递规方法调用 ~~~~其实不是不太懂啦,有时间了再琢磨吧~~~~~
75 public static void moveDish(int level,char from,char inter, char to){
76
77 if(level==1){
78 System.out.println("从"+from+"移动盘子1号到"+to);
79 } else {
80 moveDish(level-1, from, to, inter );
81 System.out.println("从"+from+"移动盘子"+level+"号到"+to);
82 moveDish(level-1, inter, from, to);
83 }
84 }
85 }//类结束~~
86
87 //范例:统计图书销量
88 class Book{
89 private static int count =0; //定义计数器,如果变量声明成static类型,可以被本类或其它类的对象共享,会跟着变
90 public Book(String title){
91 //构造方法
92 System.out.println("售出图书:"+title);
93 count++;
94 }
95 public static int getCount(){
96 return count;
97 }
98 }
99
100 //单例模式的应用:所谓单例模式就是一个类有且只有一个实例
101 class Emperor{
102 static Emperor emperor=null; //声明一个Emperor类的引用
103 private Emperor(){ //私有构造函数,防止外部new一个新实例
104 //构造方法
105 };
106
107 public static Emperor getInstance(){
108 if(emperor==null){
109 emperor=new Emperor();
110 }
111 return emperor;
112 }
113 public void getName(){
114 System.out.println("皇帝只有一个,皇帝类只能实例化一个人!!");
115 }
116 }
117
输出结果:
1 **对象的创建
2 构造方法自动调用
3 构造方法自动调用
4 构造方法自动调用
5 比较对象内存地址(co1==co2):false
6
7 **访问对象的属性和行为
8 第一个实例对象调用变量i的结果:60
9 调用call()方法
10 0 1 2
11
12 第二个实例对象调用变量i的结果:3
13 调用call()方法
14 0 1 2
15
16 **对象的比较
17 s1==s3的运算结果为:false
18 s2.equals(s3)的运算结果为:true
19
20 **范例:统计图书销量
21 售出图书:《幻城》
22 售出图书:《1988我想和这个世界谈谈》
23 售出图书:《幻城》
24 售出图书:《那小子真帅》
25 售出图书:《1988我想和这个世界谈谈》
26 总计销售了5本书!
27
28 **汉诺塔方法,难难难!!没继续研究下去!
29 从A移动盘子1号到C
30 从A移动盘子2号到B
31 从C移动盘子1号到B
32 从A移动盘子3号到C
33 从B移动盘子1号到A
34 从B移动盘子2号到C
35 从A移动盘子1号到C
36
37 **单例模式
38 皇帝只有一个,皇帝类只能实例化一个人!!
39 比较对象内容hd.equals(hd2):true
40 比较对象内存地址(hd==hd2):true
实战例子:
import java.util.StringTokenizer; public class HelloTest { public static void main(String[] args) {
// TODO Auto-generated method stub
// 继承类时,可以获取该类的成员变量的值
Desktop desktop = new Desktop();
desktop.setType("ThinkPad");
String dsType = desktop.getType();
System.out.println(dsType); // 矩形类,长宽作为类的属性,在构造方法中将长宽初始化,定义一个成员方法求矩形面积
Juxing jx = new Juxing(8.5, 7);
double w = jx.getWidth();
double h = jx.getHeight();
// double area=jx.area(w, h); //方法一
double area = jx.area();
System.out.println("长方形的面积是:" + area); } } class Desktop {
private String type;
private String sys;
private int size; public Desktop() {
} public void setType(String type) {
this.type = type;
} public String getType() {
return this.type;
} } class Juxing { private double width;
private double height; public Juxing() {
// 构造方法
} public Juxing(double width, double height) {
this.width = width;
this.height = height;
} public double getWidth() {
return this.width;
} public double getHeight() {
return this.height;
} /**********
* 方法一
* public double area(double width,double heigth){
* double area=width*height;
* return area;
* }
*****************/
public double area() {
return this.height * this.width;
}
}
No1_8.类和对象2_Java学习笔记_对象的更多相关文章
- jQuery源代码学习笔记_工具函数_noop/error/now/trim
jQuery源代码学习笔记_工具函数_noop/error/now/trim jquery提供了一系列的工具函数,用于支持其运行,今天主要分析noop/error/now/trim这4个函数: 1.n ...
- Python学习笔记_Python对象
Python学习笔记_Python对象 Python对象 标准类型 其它内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比較 对象身份比較 布尔类型 ...
- No1_7.类和对象_Java学习笔记
一.面向对象的特点:a.封装:封装是面向对象的核心思想,将对象的属性和行为封装起来的载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想: 保证了类内部数据的完整性,应用该类的用户不能轻易直接操纵 ...
- Net基础篇_学习笔记_第十一天_面向对象(面向过程与面向对象的区别/类的概念)
1.面向过程-----> 面向对象 面向过程:面向的是完成这件事儿的过程,强调的是完成这件事儿的动作. 把大象塞进冰箱里1.打开冰箱门2.把大象塞进去,亲下大象的屁股3.关闭冰箱门 孙全 瘦小 ...
- es6学习笔记-proxy对象
前提摘要 尤大大的vue3.0即将到来,虽然学不动了,但是还要学的啊,据说vue3.0是基于proxy来进行对值进行拦截并操作,所以es6的proxy也是要学习一下的. 一 什么是proxy Prox ...
- SSM框架学习笔记_第1章_SpringIOC概述
第1章 SpringIOC概述 Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架. 1.1 控制反转IOC IOC(inversion of controller)是一种概念 ...
- C++中临时对象的学习笔记
http://www.cppblog.com/besterChen/category/9573.html 所属分类: C/C++/STL/boost 在函数调用的时候,无论是参数为对象还是返回一个对 ...
- 【cocos2d-x 3.x 学习笔记】对象内存管理
内存管理 内存管理一直是一个不易处理的问题.开发人员必须考虑分配回收的方式和时机,针对堆和栈做不同的优化处理,等等.内存管理的核心是动态分配的对象必须保证在使用完成后有效地释放内存,即管理对象的生命周 ...
- Python核心编程--学习笔记--4--Python对象
现在开始学习Python语言的核心部分.首先了解什么是Python对象,然后讨论最常用的内建类型,接下来讨论标准类型运算符和内建函数,之后给出对标准类型的不同分类方式,最后提一提Python目前还不支 ...
随机推荐
- php开发客服系统(持久连接+轮询+反向ajax)
欢迎在php严程序 - php教程学习AJAX教程, 本节课讲解:php开发客服系统(持久连接+轮询+反向ajax) php开发客服系统(下载源码) 用户端(可直接给客户发送消息)客服端(点击用户名. ...
- 编写自己的javascript功能库之Ajax(仿jquery方式)
本人学习的是php,所以就用php跟js来演示代码了,主要是锻炼自己写js的能力,练练手而已. 下面这是我编写的操作ajax的代码功能,勉强让我称之为库吧.. js代码实例(tool.ajax.js) ...
- 文成小盆友python-num9 socket编程
socket编程 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket的英文原义是“孔”或“插座”.作为BSD UNIX的进程通信机制,取后一种意思 ...
- DataTables自定义事件
$(document).ready(function() { var eventFired = function(type) { var n = $('#demo_info')[0]; n.inner ...
- SMTP协议--在cmd下利用命令行发送邮件
先简单介绍下smtp smtp使用命令和应答在客户与服务器之间传输报文.即客户发出一个命令,服务器返回一个应答.发送方与接收方进行一问一答的交互,由发送方控制这个对话. 在XP系统下点‘开始’-‘运行 ...
- HADOOP都升级到2.5啦~~~
经过前年的初次接触,现在已大约能理解整个体系啦.MAPREDUCE都改成YARN啦. 不过,还得继续往前走,再能实用... HIVE,HBASE,ZOOKEEPER,, 思路如下: 安装系统,配置网络 ...
- BZOJ 2732 射箭
http://www.lydsy.com/JudgeOnline/problem.php?id=2732 题意:给你n个靶子,让你求是否有一个经过原点的抛物线经过最多的前k个靶子,求出最大的k 思路: ...
- Codeforces 533B Work Group
http://codeforces.com/problemset/problem/533/B 题目大意: 每个人有一个直接的领导,1是总裁,现在要找一个最大的集合,每个领导领导的人的数量都是偶数,问最 ...
- 11G在线重建索引
SQL> select count(*) from test_idx; COUNT(*) ---------- 19087751 SQL> select segment_name,segm ...
- BZOJ1653: [Usaco2006 Feb]Backward Digit Sums
1653: [Usaco2006 Feb]Backward Digit Sums Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 207 Solved: ...