黑马程序员——Java基础——数组工具类、设计模式和继承(一)
2015-11-18 14:57
507 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
数组工具类:
max=34
index=5
单列设计模式
输出结果:
true
true
继承:
学生好好学习,天天向上 20
工人好好工作~赚money~ 35
继承的重写(覆盖):
运行结果:
name
pic
number
构造函数:
运行结果:
A fu run
C zi run 10
------------------------
B fu run...4
D zi run 6
数组工具类:
/** * 数组工具类和文档注释 * @author maidou51 * @version v1.0 */ class ArrayTool { //该类中的方法都是静态的,所以该类时不需要创造对象的 //未来保证不让他人创建对象,可以将构造函数私有化 private ArrayTool(){} /** * 获取整型数组的最大值 * @param arr 接收一个元素为int 类型的数组 * @return 该数组的最大的元素值 * */ //获取整形数组的最大值 public static int getMax(int[] arr){ int maxIndex = 0; for (int i = 0; i < arr.length; i++) { if(arr[i]>arr[maxIndex]){ maxIndex = i; } } return arr[maxIndex]; } /** * 对数组进行选择排序 * @param arr接收一个元素为int的数组 * */ //对数组进行选择排序 public static void selectSort(int[] arr){ for (int i = 0; i < arr.length-1; i++) { for (int j = i+1; j < arr.length; j++) { if(arr[i]>arr[j]){ swap(arr,i,j); } } } } //用于给数组进行元素的位置置换. private static void swap(int[] arr, int i ,int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } /** * 获取指定的元素在指定数组中的索引 * @param arr 接收一个元素为int 类型的素组 * @param key 要找的元素 * @return 返回该元素第一次出现的位置,如果不存在则返回-1 * */ //获取指定的元素在指定数组中的索引 public static int getIndex(int[] arr,int key){ for (int i = 0; i < arr.length; i++) { if(arr[i]==key){ return i; } } return -1; } /** * 将int素组转换陈字符串,格式是:[e1,e2...] * @param arr 接收一个元素为int 类型的数组 * @return 返回该数组的字符串表现形式 * */ //将int数组转换字符串,格式是:[e1,e2...] public static String arrayToString(int[] arr){ String str = "["; for (int i = 0; i < arr.length; i++) { if(i !=arr.length-1){ str = str + arr[i]+","; }else{ str = str +arr[i]+"]"; } } return str; } } public class ArrayToolDemo { //保证程序的独立运行 public static void main(String[] args) { int[] arr = {1,2,5,8,6,3,34}; int max = ArrayTool.getMax(arr); System.out.println("max="+max); int index = ArrayTool.getIndex(arr, 3); System.out.println("index="+index); } }运行结果:
max=34
index=5
单列设计模式
/** * 单例设计模式 * 设计模式:对问题行之有效的解决方式,一种思想 * 解决的问题:就是可以保证一个类在内存中的对象唯一性 * 比如多个程序使用同一个配置信息对象时,就需要保证对象的唯一性. * 思路: * 1.不允许其他程序用new创建该类对象. * 2.在该类创建一个本类实例. * 3.提供一个方法让其他程序可以获取该对象. * 步骤: * 1.私有化构造函数. * 2.通过new在本类中创建一个静态并私有本类对象. * 3.定义一个公有的静态方法,将创建的对象返回. */ //饿汉式--直接用 class Single_Hungry{ private Single_Hungry(){} static private Single_Hungry sh = new Single_Hungry(); public static Single_Hungry getInstance(){ return sh; } } //懒汉式--先null class Single_Lazy{ private Single_Lazy(){} private static Single_Lazy sl = null; public static Single_Lazy getInstance(){ if(sl==null){ sl =new Single_Lazy(); } return sl; } } public class SingleDemo { public static void main(String[] args) { Single_Hungry sh1 = Single_Hungry.getInstance(); Single_Hungry sh2 = Single_Hungry.getInstance(); System.out.println(sh1.equals(sh2)); Single_Lazy sl1 = Single_Lazy.getInstance(); Single_Lazy sl2 = Single_Lazy.getInstance(); System.out.println(sl1.equals(sl2)); } }
输出结果:
true
true
继承:
/** * 继承:通过extends关键字让类与类之间产生继承关系. * 多个类中存在相同的属性和行为时,将这些内容抽取到单独一个类中, * 那么多个类无需再定义这些属性和行为,只需要继承那个类即可. * 1.子类可以直接访问父类中的非私有属性和行为. * 2.子类无法继承父类中私有的内容. * 3.父类怎么来的?共性不断向上抽取来的. */ class A{ void show(){ System.out.println("A"); } } class B{ void show(){ System.out.println("B"); } } /** * 注意: * 1.Java只支持单继承,不支持多继承 * 2.一个类只能有一个父类,不可以有多个父类. * 原因:因为多继承容易出现问题.两个父类中有的方法,子类到底要执行哪一个是不确定的. */ //class C extends B,A{} class Person{ String name; int age; } class Student extends Person{ void study(){ System.out.println("学生好好学习,天天向上 "+age); } } class Worker extends Person{ void work(){ System.out.println("工人好好工作~赚money~ "+age); } } public class ExtendsDemo { public static void main(String[] args) { Student s = new Student(); s.age = 20; s.name = "宝坛"; s.study(); Worker w = new Worker(); w.name = "隔壁老五"; w.age = 35; w.work(); } } /* * 继承的好处: * 1.提高了代码的复用性 * 2.让类与类产生了关系,提供了多台的前提. */ /** * java不支持多继承,但将这种机制换了另一个安全的方式来实现,也就是多实现(接口). * Java支持多层继承(继承体系): * C继承B,B继承A,就会出现继承体系. * 多层继承出现的继承体系中,通常看父类中的功能, * 了解该体系的基本功能,建立子类对象,即可使用该体系功能. * 定义继承需要注意: * 不要仅为了获取其他类中的某个功能去继承,类与类之间要所有属("is a")关系. */运行结果
学生好好学习,天天向上 20
工人好好工作~赚money~ 35
继承的重写(覆盖):
package cn.fuxi.zhabaotan3; /** * 什么时候使用覆盖操作? * 当子类需要父类的功能,而功能主题子类有自己特有内容时, * 可以复写父类中的方法,这样,继沿袭了父类的功能,又定义了子类特有的内容 * * p.s. * 1.父类中的私有方法不可以被覆盖 * 2.父类为static的方法无法覆盖 * 3.覆盖时,子类方法的权限一定要大于父类方法权限 */ class Phone{ void call(){} void show(){ System.out.println("number"); } } class NewPhone extends Phone{ public void show(){ System.out.println("name"); System.out.println("pic"); super.show(); } } public class ExtendsDemo2 { public static void main(String[] args) { NewPhone p = new NewPhone(); p.show(); } }
运行结果:
name
pic
number
构造函数:
/** * 构造函数 * 子父类构造函数的特点: * 在子类构造函数执行时,发现的父类构造函数也运行了. * 原因:在子类的构造函数中,第一行有一个默认的隐式语句:super(); * 注意: * 如果使用super(4);语句调用父类的其他构造函数, * 那么默认的父类构造函数将不会再被调用. */ class Fu2{ int num; Fu2(){ num = 10; System.out.println("A fu run"); } Fu2(int x){ System.out.println("B fu run..."+x); } } class Zi2 extends Fu2{ Zi2(){ //隐藏语句:super(); System.out.println("C zi run "+num); } Zi2(int x){ super(4); System.out.println("D zi run "+ x); } } public class ExtendsDemo3 { public static void main(String[] args) { new Zi2(); System.out.println("------------------------"); new Zi2(6); } }
运行结果:
A fu run
C zi run 10
------------------------
B fu run...4
D zi run 6
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统