面向对象简介

面向对象简介

1、面向过程的编程

(1)、c语言等面向过程编程仅考虑一个问题的解决,而很少考虑代码的复用性,一种模块化的编程,追求“低耦合、高内聚”。

2、面向对象的编程

(2)、面向对象是一种抽象化的编程,考虑了代码的复用性,面向对象的基础是面向过程,将事务抽象为具有属性、行为(方法)的类,“万物皆是类”。

3、面向对象的三大特性:封装、继承、多态

(1)、封装:内部操作于外部不可见;

(2)、继承:对模块的的扩充,在原有的基础之上添加属性,功能;

(3)、多态:在继承之上扩充概念,类型的转换处理,方法的多态:重载与覆写,对象多态:向上转型,向下转型。

  • 向下转型:父类经过显式的强制类型装换子类(父类必须是子类的一个实例)
  • 向上转型:子类直接转换为父类,没有限制。
  • 动态绑定:继承同一个父类的子类,调用相同方法名,由于传入类的不同,而函数执行结果的不同。

4、类与对象

(1)、类:实物共性的抽象,包括属性和方法

(2)、对象:类的一个实例。

(3)、类的实例化方法:

  • new直接实例化

类名 变量名= new 类名()

  • 反射机制实例化

I、Class tClass=Class.forName(className);

     Object tObject=tClass.newInstance(); //无参数

  • clone实例化

user user1=new user();

user user2=null;

user2 = user1.clone();

  • 序列化与反序列化手段

序列化:将对象状态转化为可保持或传输的格式的过程,被序列化的对象必须implments Serializable

反序列化:将流转化成对象的过程

当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,即java对象序列,才能在网络上传送,即序列化过程;接收方则需要把字节序列再恢复为java对象,即反序列化。

5、对象实例化内存分析

user user1=new user();

当在实例化对象时,new user()会在堆内存中开辟空间,存储user中的属性值,user user1会在栈内存中开辟空间保存new user()的地址,我们为简化起见,假设保存user1。

6、java常用关键词解析

面向对象简介

 

面向对象简介

6、数组

(1)、定义:有序的元素序列。

(2)、数组的创建:数据类型 [] 变量名 =new 数据类型 []

(3)、数组的静态初始化和动态初始化:

数组动态初始化:在程序运行时,由系统为数组赋值

数组动态初始化:在数组创建时,就赋值。有以下两种方法:

  • 数据类型 [] 变量名 =new 数据类型 [] {元素1,元素2,元素3,......,元素n};
  • 数据类型 [] 变量名={元素1,元素2,元素3,......,元素n};

(4)、数组遍历:

  • 普通遍历:for循环遍历
  • 特殊遍历 foreach遍历 : for(数据类型 变量名:数组变量名){}

(5)、数组排序

  • 冒泡排序:每次循环,相邻两个数比较,上一个数比下一个数小,就互换,否则继续比较大小。

面向对象简介 

代码:

public static int [] bubbleSort(int data[]){

//外层循环控制循环次数

for (int x=0;x<data.length-1;x++){

//内层循环控制比较次数

for (int j=0;j<data.length-x-1;j++ ) {

if(data[j]>data[j+1]){

int tmp=data[j];

data[j]=data[j+1];

data[j+1]=tmp;

}

}

}

return data;

 

  • 选择排序:找到单词循环比较重的一个最小值,将此最小值与本次比较的数,对换。

面向对象简介

 

//外层循环控制那个数据去比较

for (int x=0;x<data.length-1;x++){

int minIndex=x;

//内层循环控制和谁去比较以及怎么比较

for (int j=x+1;j<data.length;j++){

if (data[minIndex]>data[j]){

minIndex=j;

}

}

int tmp=data[x];

data[x]=data[minIndex];

data[minIndex]=tmp;

}

return data;

 

  • 快速排序
  • 插入排序
  • 归并排序

(6)、java相关类库

排序:java.util.Array.sort(data[])

数组拷贝:System.arraycopy(源数组,源数组拷贝开始点,拷贝数组,拷贝数组开始点,拷贝长度)

(7)、方法参数可变:

方法名(数据类型... 参数名)

(8)、对象数组

类名 [] 引用变量名=new 类名[长度] ;

7、引用传递的实际应用

(1)、类关联结构

例:一个人拥有一台电脑,一台电脑属于某一个人:

package day01;

 

/*

 

* 创建时间:2018年7月6日 下午8:24:06

 

* 项目名称:studyJava

 

* @author 飞鱼

 

* @version 1.0

 

* @since JDK 1.8.0_151

 

* 文件名称:ClassUnion.java

 

* 类说明: 类关联结构

 

*/

 

class person{

private String name;

private computer computer;

 

public person(String name){

this.name=name;

}

 

public void setComputer(computer computer) {

this.computer = computer;

}

 

public computer getComputer(){

return this.computer;

}

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

public String getInfo() {

return this.name+"拥有价值"+this.computer.getPrice()+"的"+this.computer.getName();

}

 

}

 

class computer{

private String name;

private double price;

private person person;

public computer(String name, double price) {

this.name = name;

this.price = price;

}

 

public person getPerson() {

return person;

}

 

public void setPerson(person person) {

this.person = person;

}

 

public String getInfo() {

return "价值:"+this.price+this.name+"属于"+this.person.getName();

}

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

public double getPrice() {

return price;

}

 

public void setPrice(double price) {

this.price = price;

}

}

public class ClassUnion {

//初始化类

public static void main(String[] args) {

//实例化类

person person=new person("王五");

computer computer=new computer("惠普",6100);

//一个人拥有一台电脑

person.setComputer(computer);

//一台电脑属于一个人

computer.setPerson(person);

System.out.println(person.getInfo());

System.out.println(computer.getInfo());

}

}

 

结果:王五拥有价值6100.0的惠普

价值:6100.0惠普属于王五

(2)、自身关联

package day01;

 

 

/*

 

* 创建时间:2018年7月6日 下午11:01:10

 

* 项目名称:studyJava

 

* @author 飞鱼

 

* @version 1.0

 

* @since JDK 1.8.0_151

 

* 文件名称:selfUnion.java

 

* 类说明: 类的自身关联

 

*/

class person{

private String name;

private int age;

private person children [];

public person() {

super();

}

public person(String name, int age) {

super();

this.name = name;

this.age = age;

}

private computer computer;

public computer getComputer() {

return computer;

}

public void setComputer(computer computer) {

this.computer = computer;

}

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 person[] getChildren() {

return children;

}

public void setChildren(person children[]) {

this.children = children;

}

public String getInfo() {

return this.name+"拥有价值"+this.computer.getPrice()+"的"+this.computer.getName()+"电脑";

}

}

 

class computer{

private String name;

private double price;

private person person;

public computer(String name, double price) {

super();

this.name = name;

this.price = price;

}

public person getPerson() {

return person;

}

public void setPerson(person person) {

this.person = person;

}

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

public double getPrice() {

return price;

}

 

public void setPrice(double price) {

this.price = price;

}

 

public String getInfo() {

return "价值"+this.price+"的"+this.name+"电脑属于"+this.person.getName();

}

}

 

public class selfUnion {

public static void main(String[] args) {

person father=new person("王", 45);

person childrenA=new person("王无", 18);

person childrenB=new person("王六", 19);

computer computerA=new computer("DELL", 4300);

computer computerB=new computer("惠普", 6300);

childrenA.setComputer(computerA);

childrenB.setComputer(computerB);

father.setChildren(new person[] {childrenA,childrenB});

for(int x=0;x<father.getChildren().length;x++) {

System.out.println(father.getChildren()[x].getInfo());

}

}

 

}

 

(3)、合成设计模式

实际设计类的时候,将一个事物拆分为多个类实现,等到实际应用的时候将各个类组合成一个类的设计模式。

案例:电脑类的合成设计

class 电脑{

class 主机 对象;

class 显示器 对象[] ;

class 主机{

class 主板 对象;

class 键盘 对象;

class 鼠标 对象;

class 显示器{}

class 主板{

private 内存 对象[];

private 硬盘 对象;

private 显卡 对象;

class 内存{}

class 硬盘{}

class 显卡{}

class 键盘{}

class 鼠标{}

引用传递在java类的实现有巨大的作用。