Java学习笔记——Java SE(四)面向对象(上)

01.基本概念

  1. 面向对象是一种编程思想,一种思考问题的思维方式;
  2. 建立面向对象思维方式:
    2.1 先整体,再局部;
    2.2 先抽象,再具体;
  3. 对比:
    3.1 面向过程:以步骤为单位,一步一步完成某个具体事情;
    3.2 面向对象:以对象为单位,通过调度组合不同的对象来完成某件事。

02.类和对象

  1. 类:分类、类别,通过分类,区分不同的事物种类;所以类是一组具有相同特性(属性)与行为(方法)的事物的集合;
  2. 类和对象的关系:
    2.1 类表示一个共性的产物,是一个综合的特征;
    2.2 对象是一个个性的产物,是一个个体的特征;
    2.3 类由属性和方法组成,属性就相当于一个个的特征,方法就相当于一个个的行为;
  3. 定义方式:
    3.1 class+类名称{ },类名称 对象名称=new 类名称();
    3.2 一个类想要真正的进行操作,则必须依靠对象;
    3.3 访问类中的属性和方法:对象.属性,对象.方法();
    3.4 class Horse{Horse h=new Horse();h.run();new Horse.eat()(匿名对象);}
    3.5 匿名对象:只能使用一次,用完后,该对象就会被释放;
    3.6 释放对象:h=null,堆内存中的对象没有栈中的引用指向时,会被GC回收;
    对象内存分析
  4. 小结:
    小结

03.封装性

  1. 概念:隐藏实现细节,仅对外提供访问接口;
  2. 优点:
    2.1 模块化;
    2.2 信息隐藏;
    2.3 代码重用;
    2.4 插件化易于调试;
    2.5 具有安全性;
  3. 缺点:影响程序执行效率;
  4. 实现:private关键字修饰属性和方法,提供public共有的方法间接访问;
  5. 成员变量和局部变量:
    5.1 类中的位置不同: 成员变量书在类中定义的变量,局部变量是在方法中定义的变量;
    5.2 内存中的位置不同:成员变量属于对象,进堆内存;局部变量属于方法,进栈内存;
    5.3 生命周期不同:成员变量随着对象的创建而存在,随着对象的销毁而消失;局部变量随着方法的调用而存在,方法调用完毕消失;
    5.4 初始化值不同:成员变量有默认初始化值,引用类型默认为null;局部变量没有默认初始化值,必须定义、赋值。

04.构造方法

  1. 定义:类构造对象时调用的方法,用于对象的初始化,是实例化(new创建)一个类的对象最先调用的方法;
  2. 定义格式:方法名称与类名称相同,无返回值类型;
  3. 构造方法重载:无参构造方法、带参构造方法;
  4. 小结:
    构造方法小结
  5. this关键字:
    5.1 调用类中的属性;
    5.2 调用类中的方法或构造方法;
    5.3 表示当前对象;
  6. 值传递与引用传递:
/**
示例一:值传递
*/
public class Test1 {
	public static void main(String[] args) {
	    int x=10;
	    method(x);
	    //基本数据类型直接赋值,跟堆没关系,输出仍然是10
	    System.out.println("x="+x);
	}
	public static void method(int mx) {
	    mx=20;
	}
}
/**
示例二:引用传递
*/
public class Test2 {
	public static void main(String[] args) {
	    int x=10;
	    Duck d=new Duck();
	    method(d);
	    //duck,d都存的一样的内存地址,都指向同一个堆内存对象,修改了age的值
	    System.out.println("Duck age="+d.age);
	}
	public static void method(Duck duck) {
	    duck.age=5;
	}
	class Duck{
	    int age=2;
	}
}
  1. static关键字:
    7.1 修饰属性,实质上就是全局变量;
    7.2 修饰方法,无需本类的对象即可调用此方法;
    7.3 修饰一个类(内部类);
  2. 声明static方法限制:
    8.1 仅能调用其他static方法;
    8.2 只能访问static数据;
    8.3 不能以任何方式引用this或super。

05.代码块

  1. 普通代码块:直接写在方法中的代码块;
public class Test {
	public static void test() {
	    {//普通代码块,限制作用域
	        int i=10;
	        System.out.println(i);
	    }
	}
}
  1. 构造块:在类中定义的代码块,在创建对象时被调用,优于构造方法执行;
public class Test {
	{//构造块
	    System.out.println("构造块");
	}
}
  1. 静态代码块:在类中使用static声明的代码块,在第一次创建对象时被调用,只会执行一次,优于构造块执行,一般用来初始化只调用一次的数据;
public class Test {
	static{
	    System.out.println("静态代码块");
	}
}
  1. 同步代码块:多线程时讲解;
  2. 重点:使用的顺序:静态代码块、普通代码块、同步代码块、构造代码块。

06.单例设计模式

  1. 保证一个类仅有一个实例,并提供一个访问它的全局访问点;
    1.1 构造方法私有化;
    1.2 声明一个本类对象;
    1.3 给外部提供一个静态方法获取对象的实例;
  2. 两种实现方式:
    2.1 饿汉式:在类被加载后,对象被创建;
    2.2 懒汉式:在第一次调用get方法时,对象被创建;
/**
1.饿汉式:占用内存时间长,提高效率
*/
public class Singleton1 {
	private Singleton1() {};
	private static Singleton1 s = new Singleton1();
	public static Singleton1 getInstance {
	    return s;
	}
}
/**
2.懒汉式:占用内存时间短,效率稍低
*/
public class Singleton2 {
	private Singleton2() {};
	private static Singleton2 s;
	public static Singleton2 getInstance {
	    if(s==null){
	        s=new Singleton2(); 
	    }
	    return s;
	}
}
  1. 优点:
    3.1 在设计一些工具类的时候使用单例设计模式(通常工具类,只有功能方法,没有属性);
    3.2 工具类可能被频繁调用;
    3.3 节省重复创建对象所带来的内存消耗,提高效率。

07.对象数组案例

对象数组与管理:使用对象数组实现多个Chicken的管理;

// 需要管理的对象
public class Chicken {
	private int id;
	private String name;
	private int age;
	public Chicken() {}
	public Chicken(int id, String name, int age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public void print() {
		System.out.println("Chicken [id=" + id + ", name=" + name + ", age=" + age + "]");
	}
}
// 对象数组管理
import java.util.Arrays;
public class ChickenManager {
	private Chicken[] cs = null;
	private int count = 0;
	public ChickenManager(int size) {
		if (size > 0) {
			cs = new Chicken[size];
		} else {
			cs = new Chicken[5];
		}
	}
	// 实现动态数组
	// 添加
	public void add(Chicken c) {
		if (count >= cs.length) {
			int newLength = cs.length * 2;
			cs = Arrays.copyOf(cs, newLength);
		}
		cs[count] = c;
		count++;
	}
	// 删除
	public void delete(int id) {
		for (int i = 0; i < count; i++) {
			if (cs[i].getId() == id) {
				for (int j = i; j < count - 1; j++) {
					cs[j] = cs[j + 1];
				}
				cs[count - 1] = null;
				count--;
				break;
			}
		}
	}
	// 更新
	public void update(Chicken c) {
		Chicken temp = find(c.getId());
		if (temp != null) {
			temp.setName(c.getName());
			temp.setAge(c.getAge());
		}
	}
	// 查找
	public Chicken find(int id) {
		for (int i = 0; i < count; i++) {
			if (cs[i].getId() == id) {
				return cs[i];
			}
		}
		return null;
	}
	public void printAll() {
		for (int i = 0; i < count; i++) {
			cs[i].print();
		}
	}
	public int length() {
		return cs.length;
	}
}
//测试
public class ChickenTest {
	public static void main(String[] args) {
		ChickenManager cm = new ChickenManager(5);
		//动态数组,可添加超过原始数组长度
		cm.add(new Chicken(1,"小小",10));
		cm.add(new Chicken(2,"小一",2));
		cm.add(new Chicken(3,"小二",8));
		cm.add(new Chicken(4,"小三",6));
		cm.add(new Chicken(5,"小四",12));
		cm.add(new Chicken(6,"小五",5));
		cm.add(new Chicken(7,"小六",4));
		//打印所有
		System.out.println("-----打印所有-------");
		cm.printAll();
		//查找
		System.out.println("-----查找-------");
		cm.find(3).print();
		//更新
		cm.update(new Chicken(1,"下蛋公鸡",9));
		System.out.println("-----更新打印-------");
		cm.printAll();
		//删除
		cm.delete(3);
		System.out.println("-----删除打印-------");
		cm.printAll();
		
		cm.find(1).print();
		System.out.println(cm.length());
	}
}

08.下一篇:面向对象(下)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的医院后台管理系统实现了病房管理、病例管理、处方管理、字典管理、公告信息管理、患者管理、药品管理、医生管理、预约医生管理、住院管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让医院后台管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值