Java实例 Part5:面向对象入门
Part5:面向对象入门
@
Example01:成员变量的初始化值
运行结果:
代码实现:
public class Example01 {
//声明变量
private byte b;
private int i;
private short s;
private long l;
private char ch;
private float f;
private double d;
private boolean bool;
private String str;
public static void main(String[] args) {
Example01 example = new Example01();
System.out.println("byte类型的初始值:"+example.b);
System.out.println("int类型的初始值:"+example.i);
System.out.println("short类型的初始值:"+example.s);
System.out.println("long类型的初始值:"+example.l);
System.out.println("char类型的初始值:"+example.ch);
System.out.println("float类型的初始值:"+example.f);
System.out.println("double类型的初始值:"+example.d);
System.out.println("boolean类型的初始值:"+example.bool);
System.out.println("String类型的初始值:"+example.str);
}
}
- 要点:对于引用类型的变量,在使用之前需要进行初始化,否则会抛出NullPointerException。
Example02:单例模式的应用
-----懒汉式
运行结果:
实现代码:
class Single {
private static Single s = null;
private Single(){}
public static Single getInstance(){
if (s == null){
s = new Single();
System.out.println("---我是懒汉!");
}
return s;
}
}
- 懒汉式在方法中创建这个类的对象,调用效率不高,但能延时加载。
-----饿汉式
运行结果:
代码实现:
class Single {
private static Single s = new Single();
private Single(){}
public static Single getInstance(){
System.out.println("---我是饿汉!");
return s;
}
}
- 饿汉式在全局变量范围内创建这个类的对象,调用效率高,但不能延时加载。
== 测试代码:==
public class Example02 {
public static void main(String[] args) {
System.out.println("---你又是谁?");
Single.getInstance();
}
}
要点:单例模式的特点在于仅能获得一个对象。为了防止其他用户创建对象,需要将构造函数设置成private的,然后提供一个静态方法,该方法返回这个类的对象。
Example03:汉诺塔问题的求解
- 汉诺塔问题描述:有A、B、C 3根柱子,在A上从下往上按照从小到大的顺序放着3个圆盘,以B为中介,把盘子全部移动到C上。移动过程中,要求任意盘子的下面要么没有盘子,要么只能有比它大的盘子。
运行结果:
代码实现:
public class Example3 {
public static void main(String[] args) {
int nDisks = 3; //设置汉诺塔为3阶
moveDish(nDisks,'A','B','C');
}
public static void moveDish(int level,char from,char inner,char to){
if (level == 1){ //如果只有一个盘子
System.out.println("从"+from+"移动盘子1号到"+to);
}else { //如果有大于一个盘子就迭代
moveDish(level-1,from,to,inner);
System.out.println("从"+from+"移动盘子"+level+"号到"+to);
moveDish(level-1,inner,from,to);
}
}
}
- 要点:为了将N个盘子从A移动到C,需要先将N个盘子上面的N-1个盘子移动的B上,这样才能将第N个盘子移动到C上,同理,为了将第N-1个盘子从B移动到C上,通过递归可以实现汉诺塔问题。(上面的程序是3阶汉诺塔问题,有需要可以改写成自己需要计算的输入程序的n阶汉诺塔问题)
Example04:两只完全相同的宠物并得出对象的哈希码
- 要求:重写equals()和toString()以及hashCode()方法来比较两个对象是否相同。
运行结果:
代码实现:
import java.awt.*;
import java.util.Objects;
public class Cat {
private String name;
private int age;
private double weight;
private Color color;
public Cat(String name, int age, double weight, Color color) {
this.name = name;
this.age = age;
this.weight = weight;
this.color = color;
}
@Override
public boolean equals(Object o) { //利用属性来判断猫咪是否相同
if (this == o) { //如果两个猫咪是同一个对象则相同
return true;
}
if (o == null ) { //如果两个猫咪有一个为null则不同
return false;
}
if (getClass() != o.getClass()) { //如果两个猫咪的类型不同则不同
return false;
}
Cat cat = (Cat) o;
//比较猫咪的属性
return age == cat.age && Double.compare(cat.weight, weight) == 0 && Objects.equals(name, cat.name) && Objects.equals(color, cat.color);
}
@Override
public String toString() { //重写toString()方法
return "Cat{" +
"名字='" + name + '\'' +
", 年龄=" + age +
", 重量=" + weight +
", 颜色=" + color +
'}';
}
@Override
public int hashCode() {
return Objects.hash(name, age, weight, color);
}
public static void main(String[] args) {
Cat c1 = new Cat("hyn",3,10,Color.PINK);
Cat c2 = new Cat("azw",4,15,Color.YELLOW);
Cat c3 = new Cat("hyn",3,10,Color.PINK);
System.out.println("猫咪1号:"+c1);
System.out.println("猫咪2号:"+c2);
System.out.println("猫咪3号:"+c3);
System.out.println("猫咪1号的哈希码:"+c1.hashCode());
System.out.println("猫咪2号的哈希码:"+c2.hashCode());
System.out.println("猫咪3号的哈希码:"+c3.hashCode());
System.out.println("猫咪1号是否与2号相同:"+c1.equals(c2));
System.out.println("猫咪1号是否与3号相同:"+c1.equals(c3));
}
}
- 要点:Java中创建的对象是保存在堆中的,为了提高查找的速度而使用了散列查找。散列查找的基本思想是定义一个键来映射对象所在的内存地址。当需要查找对象时,直接查找键即可,这样就不用遍历整个堆来查找对象了。
提高:对toString()方法里面的内容进行改进,通过使用字符串输出对象。
运行结果:
代码实现:
@Override
public String toString() { //重写toString()方法
StringBuilder sb = new StringBuilder();
sb.append("名字:"+name+"\n");
sb.append("年龄:"+age+"\n");
sb.append("重量:"+weight+"\n");
sb.append("颜色:"+color+"\n");
return sb.toString();
}
Java实例 Part5:面向对象入门的更多相关文章
- Java面向对象入门
Java面向对象入门 一.Java面向对象的基本组成 Java类及类的成员:属性.方法.构造器:代码块.内部类 面向对象三大特征:封装.继承.多态(抽象) 关键字:this.super.static. ...
- Thrift入门及Java实例演示<转载备用>
Thrift入门及Java实例演示 作者: Michael 日期: 年 月 日 •概述 •下载配置 •基本概念 .数据类型 .服务端编码基本步骤 .客户端编码基本步骤 .数据传输协议 •实例演示(ja ...
- 第二十五节:Java语言基础-面向对象基础
面向对象 面向过程的代表主要是C语言,面向对象是相对面向过程而言,Java是面向对象的编程语言,面向过程是通过函数体现,面向过程主要是功能行为. 而对于面向对象而言,将功能封装到对象,所以面向对象是基 ...
- Java的多线程 简单入门
Java的多线程 简单入门 首先能够先搞清楚什么是程序.进程.线程,以及它们之间的关系: 定义: 一 程序仅仅是一组指令的有序集合.它是静态的 二 进程是具有一定独立功能的程序关于某个数据集合上的一次 ...
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 0025 Java学习笔记-面向对象-final修饰符、不可变类
final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...
- 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类
static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
随机推荐
- Java实例---flappy-bird实例解析
第一天: 实现背景图片和小鸟的动态飞行效果 package com.ftl.flappybird.day2; import java.awt.Color;//颜色 Color.class import ...
- hmac 算法模块
Hmac算法:Keyed-Hashing for Message Authentication.它通过一个标准算法,在计算哈希的过程中,把key混入计算过程中 Python自带的hmac模块实现了标准 ...
- Spark shuffle调优
1:sparkconf.set("spark.shuffle.file.buffer","64K") --不建议使用,因为这么写相当于硬编码2:在conf/sp ...
- Kendo UI 的 k-template
官网上的例子: 1. <span id="output"></span><script>var template = kendo.templat ...
- January 02 2017 Week 1st Monday
A day is a miniature of eternity. 一天是永恒的缩影. My life is short, but I can make something eternal. What ...
- 在windows下解压缩rar文件
这是一篇比较无聊的博文.只是给博客除草的. 我从我的移动硬盘里翻出来了一堆电子书,从哪拿到的我忘了,但是都打在rar的压缩包里,这让我查找起来非常不方便.前几天找某本书看,就没有查到,又百度到的下载地 ...
- Java并发案例05---Master-Worker模式
Master-Worker 模式是常用的并行计算模式.它的核心思想是系统由两类进程协同工作,Master和Worker进程.Master负责接收和分配任务,Worker负责处理子任务.当各个Worke ...
- 【[HEOI2014]大工程 】
可能是虚树板子题了 首先先把虚树建出来,但是这里和那道虚树的入门题不一样,这里所有的询问点都得在虚树里,所以不会存在那种直接不如栈的点 之后我们考虑一下这个三个要求的东西 第一个操作我们需要统计虚树上 ...
- C# winform 数据库操作知识点总结(干货)
1.数据库连接及操作 在说数据库操作之前,先说一下数据库连接操作字符串的获取 首先,点击服务器资源管理器,接下来选中数据连接右键点击添加连接,填入你要连接的服务器名称,点击单选框使用SQL Serve ...
- java反序列化Commons-Collections1分析
AnnotationInvocationHandler关键类 Commons-Collections1也是利用InvokerTransformer类中的transform方法反射机制执行命令.实验用的 ...