JAVA编程基础(JAVA面向对象程序设计第二章)

数据类型

  • java的数据类型只有两大类:8大基本数据类型引用数据类型。其中基本数据类型又被称为值类型
    • 基本数据类型:6种数字类型(byte/short/int/long/float/double)、1种字符型(char)、1种布尔型(boolean)
    • 引用数据类型:类(Class)、接口(Interface)、数组(Array)
    • 除了以上的基本数据类型和引用数据类型,还有一些其他相关的数据类型,例如字符串类型String、枚举类型Enum,它们都是基于引用数据类型来实现的
  • 基本数据类型只能存自己类型的值,无其他额外功能,具体介绍如下第2小节
  • 引用类型:参数传递时,以拷贝引用地址的方式传递给接收变量,而非复制整个数据本体。除八大基本数据类型之外的所有数据类型,都为引用数据类型。所有引用数据类型的默认值都为null。
  • 为了基本数据类型可以与引用数据类型互相转换、以利用彼此的特性,java为每一种基本数据类型提供了相应的包装类。包装类对基本数据类型进行了封装,提供了丰富的功能,包装类是基本类型的拓展
  • 包装类是引用类型的一种,包装类与基本数据类型一一对应,也有8种,分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean

运算符

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 语言内置了丰富的运算符,并提供了以下类型的运算符:

流程控制

控制流程(也称为流程控制)是计算机运算领域的用语,意指在程序运行时,个别的指令(或是陈述、子程序)运行或求值的顺序。不论是在声明式编程语言或是函数编程语言中,都有类似的概念。流程控制主要通过选择结构(if、else if、else)、循环结构(for、while、do-while)、以及关键字(break、continue、return)来实现。

if-else:

if (条件表达式1) { 
    代码块1;
} else if (条件表达式2) {
    代码块2;
}
...
}else if (条件表达式n) {
    代码块n;
} else {
    代码块n+1;
}

swith-case:

switch(变量){
    case 值1:
        代码块1;
        break;
    case 值2:
        代码块2;
        break; 
    ...
   default:
       代码块n+1;
        break;

}

for循环:

for (循环初始化表达式; 循环条件表达式; 循环后的操作表达式){
            循环体;

 while循环:

while(条件表达式){
    循环体;
}

do-while循环:

do{
    循环体;
}while(条件表达式);

在任何循环的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。而continue只能终止某次循环,继续下次循环。

数组

数组创建方式:

//法一 int[] arr1 = new int[]{1,2,3,4,5}; System.out.println(arr1.length + " " + arr1[2]); 

//Arrays.toString(Object[]) 将数组的元素生成字符串,数组的各个元素使用方括号括着 [ ] System.out.println(Arrays.toString(arr1)); 

//法二 声明、分配空间并赋值 int[] arr2 = {1,2,3,4}; System.out.println(arr2.length + " " + arr2[2]); 

//法三 声明数组时指定元素个数,然后赋值。此时所有的元素值均为0 int[] arr3 = new int[4]; System.out.println(arr3.length + " " + arr3[3]); 

//法四 声明数组名、开辟空间、赋值 int[] arr4; arr4 = new int[]{0,1,2,3}; System.out.println(arr4.length + " " + arr4[2]);

//创建多维数组 int[][] doubleArr1 = {{1,2,3},{4,5,6},{7,8,9}}; int m = 3, n = 4, q = 5;

 int[][] doubleArr2 = new int[m][n]; //其中n可以省略

int[][][] tArr = new int[m][n][q]; //其中n、q可以省略 }

数组排序算法:

冒泡排序:

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

算法描述:

  1. 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
  3. 针对所有的元素重复以上的步骤,除了最后一个;
  4. 重复步骤1~3,直到排序完成。

选择排序:

选择排序是一种简单直观的排序算法,它也是一种交换排序算法,和冒泡排序有一定的相似度,可以认为选择排序是冒泡排序的一种改进。

算法描述:

  1. 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
  2. 从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
  3. 重复第二步,直到所有元素均排序完毕。

插入排序:

插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

算法描述:

  1. 把待排序的数组分成已排序和未排序两部分,初始的时候把第一个元素认为是已排好序的。
  2. 从第二个元素开始,在已排好序的子数组中寻找到该元素合适的位置并插入该位置。
  3. 重复上述过程直到最后一个元素被插入有序子数组中。

Arrays工具类:

static string toString(Type[ ] arr) 按照特定格式将数组转换成字符串;

static boolean equals(Type[ ] arr1,Type[ ] arr2) 比较两个数组的所有内容是否相同;

static void sort (Type[ ] arr) 对数组元素进行排序;

static int binarySearch(Type[ ] arr,Type value)二分法查找某个值在数组中的索引位置。

面向对象的程序设计(基础)

面向对象程序设计

面向对象顾名思义就是把现实中的事务都抽象成为程序设计中的“对象”,其基本思想是一切皆对象,是一种“自下而上”的设计语言,计组件,再完成拼装。

对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。 

:类是一个模板,它描述一类对象的行为和状态。

特点:封装、继承、多态。

面向对象三大主要特征


①封装

两层含义:一层含义是把对象的属性和行为看成一个密不可分的整体,将这两者“封装”在一个不可分割的独立单元(即对象)中;另一层含义指“信息隐藏”,把不需要让外界知道的信息隐藏起来,有些对象的属性及行为允许外界用户知道或使用,但不允许更改,而另一些属性或行为,则不允许外界知晓,或只允许使用对象的功能,而尽可能隐藏对象的功能实现细节。

封装的优点

a.良好的封装能够减少耦合,符合程序设计追求“高内聚,低耦合”。

b.类内部的结构可以自由修改。

c.可以对成员变量进行更精确的控制。

d.隐藏信息实现细节。

e.实现Java封装的步骤

1. 修改属性的可见性来限制对属性的访问(一般限制为private),例如:

这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。

2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:

采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。

封装同时可以提高代码的安全性,例如普通的类属性不是private修饰就直接可以通过“对象名.属性 = xxx”对其赋值,但当我们用private修饰该属性后就不能这样对其做任意的修改了,而且我们还可以在其对外的访问方法中进行合法值校验。比如上例中的setAge()就可以更改为:

②继承

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

类的继承格式:

class 父类 { }

class 子类 extends 父类 { }

继承的类型:需要注意的是 Java 不支持多继承,但支持多重继承。

 static关键字(静态)

static表示静态的意思,既可以修饰成员变量,又可以修饰成员方法,还有一种特殊用法修饰类

(1)、修饰成员变量表示静态变量:static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。static成员变量的初始化顺序按照定义的顺序进行初始化。static不能修饰局部变量。

(2)、修饰成员方法:static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

(3)static代码块:static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

③多态

多态是同一个行为具有多个不同表现形式或形态的能力。

Java语言中含有方法重载与对象多态两种形式的多态:

方法重载:在一个类中,允许多个方法使用同一个名字,但方法的参数不同,完成的功能也不同。

对象多态:子类对象可以与父类对象进行转换,而且根据其使用的子类不同完成的功能也不同(重写父类的方法)。

一般来说,定义的类都在包下,当要使用一个类时,需要导入对应的包。

导包代码如下:

import 包名.类名;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值