Java基础学习3

2020/4/17 Java学习笔记

数组和常用算法

  • 一维数组
  • 常用算法
  • 多维数组
  • 经典算法
  • 增强for循环与数组

一维数组的使用方法:

  • 声明数组int []a / int a[];
  • 分配数组内存空间, a = new int[5];
  • 数组赋值 a[0]=8;
  • 处理数据

二维数组的使用方法:

int [][]a = new int[2][3];
int [][]a = {{1,2,3}, {4,5,6}};

C/C++: int a[5] = {0},申请空间和初始化就一行代码,幸好JAVA有GC机制。。
JAVA中: int []a = {1, 2, 3};int []b = new int[] {s89, 79, 76};
默认情况下,整型数组会为每一个元素赋一个初值0。

常见算法:

  • 求和,求最大最小
  • 数组排序:java.util.Arrays 提供Arrays.sort(数组首地址)函数,达到升序排列的方法
  • 数组复制:System.arraycopy(a1, 0, a2, 0, arr1.length);//将a1的从0开始的arr1.length个数的元素复制到arr2(从0开始)

经典算法:

  • 冒泡排序
  • 插入排序:检查数组列表中的每个元素,并将其放在已排序元素的适当位置。

增强for循环:

for (int temp : arr) { //个人觉得这个更像是迭代器
    System.out.println(temp);
}
int [][]arr = {{1, 2, 3},{4, 5, 6,},{7, 8, 9} };
for (int []row : arr) {
    for (int temp : row){
        System.out.println(temp);
    }
}

抽象和封装

  • 面向过程的设计思想
  • 抽象
  • 封装
  • 属性、局部变量/成员属性、变量的作用域
  • 方法
  • 方法调用
  • 方法参数及传递问题
  • this关键字
  • 简单的javabean类

OOP(Object Oriented Programming)四大特征:

  • 抽象Abstract
  • 封装Encapsulation
  • 继承Inheritance
  • 多态Polymorphism

JAVA创建类的方式与C++类似:

public class ClassRoom  {
    String Name;
    int classNum;
    int labNum;
    public String shouKe() {
        return Name + "培训学员"+"\n"+classNum + "教" + labNum
    }
}

JAVA中对象的创建和使用:

ClassRoom center = new ClassRoom();
center.Name = "北京中心"

JAVA类中定义的属性

  • 常量属性final(感觉类似C++里面的const):它的值只能赋值一次,之后不能更改。
  • 非常量属性就是成员属性,直接定义在类的主体中

JAVA类中的遍历

  • 成员变量
  • 局部变量:定义在方法里面的变量

JAVA中的方法(类似C++中类的接口)

JAVA方法:对对象的执行操作叫方法

JAVA只有构造方法(构造函数)没有析构函数(GC机制)

JAVA调用方法的参数是对象时传递是地址。

this关键字:与C++类似,this始终指向调用这个方法的对象

  • 为了避免参数的作用范围覆盖了成员变量的作用范围,必须明确的使用this关键字来指定。
  • 如果某个构造方法的第一条语句具有形式this(..),那么这个构造方法将调用本类中的其它购物方法。
public Employee1(String name,int age){

}
public Employee2() {
    this("犀浦余文乐", 21);
}

JavaBean

JavaBean:符合如下标准的java类:

  • 有一个无参的公共构造方法
  • 有属性
  • 属性有对应的get、set存取方法

为了解决管理一个大型软件系统中数目众多的类,解决类命名冲突的问题,java引入了包(package)

包的作用:

  • 允许类组成较小的单元(类似文件夹), 易于找到使用相应的文件。
  • 更好的保护类数据和方法
  • 防止命名冲突

如何创建包:

package java.shan.chapter5;//声明一个包

  • 创建包用package关键字.
  • 包的声明要写在源代码的第一行
  • 包的名称一般为小写,而且要有意义

编译生成包:

编译时不能直接用java.exe编译,要带上"-d"这个参数来编译。
(1) 在当前目录下生成包java -d Employee2.java
(2) 在指定的目录下生成包:java -d D:\share Employee.java

运行一个带包的类: java 包名.类名

使用带包的类

import 关键字导入这个类 (此处特别像python的第三方库引入模块的语法)

import 包名.类名;
import java.util
import java.lang

JDK中常用包的介绍

  • java.lang:包含一些JAVA语言的核心类,如String、Math、Integer、System和Thread提供常用功能。因为常用所以默认导入可以直接使用
  • java.util: 包含一些实用的工具类, 如定义系统特性、日期时间、日历、集合类等。
  • jaba.io: 包含能提供多种输入输出的流类
  • java.net: 包含执行网络相关的操作的类
  • java.sql: Java操作数据库的API
  • java.text: 包含一些用来处理文本、日期、数字和消息的类和接口
  • java.awt: 包含构成抽象窗口工具集的多个类,这些类被用来构建和管理应用程序的图形界面(GUI)
  • java.swing: 包含了构成“轻量级”窗口的组件。

JAVA中的继承和多态:

  • 继承Inheritance
  • 多态Polymorphism
  • 访问修饰符
  • static关键字
  • final关键字
  • abstract关键字
  • 接口

Java的继承实现:

class Manager extends Employee { //经理类继承自员工类

}

super关键字:指向父类对象的引用,用于初始化父类的属性和调用父类的方法

调用父类构造方法的语法:

super() 或 super(实参列表);//必须是第一句

调用父类的普通方法的语法为:

super.methodname() 或 super.methondname(实参列表)

Object类:

Java类的祖先类是java.lang.Object类。这是所有类的父类
没有extends指定父类默认是Object类。

Object类中几个实用方法:

  • toString():返回代表该对象值的字符串。Object类中返回的字符串形式是"类名@内存地址的十六进制整数值."
  • equals(Object obj):测试其它某个对象是否与此对象“相等”,具体是实现是通过判断两个对象是否指向同一块内存区域来判断的。
  • hashCode():返回该对象的哈希码值, 重写equals()方法时,可以页重写hashCode(),可以用于判断两个对象是否为相同的对象,可以结合使用
  • Clas<?> getClass(): 返回此对象运行时的类。
  • clone(): 克隆一个对象,创建并返回此对象的一个副本

Java中多态的实现:

  1. 方法重载overloading
  2. 方法重写override

类型转换、向上转型和向下转型

  1. 父类的变量可以指向其子类的对象: Father son=new Son();小的数据可以赋值给大的数据,反过来却不行
  2. 父类变量显然不能访问其子类对象的新成员
  3. 可以使用 a instanceof Cat//返回值为boolean来判断该变量指向的对象是否属于该类。即判断子类是否是相应父类的子类
  • 向上转型可以直接使用 double a = b;//b is int
  • 向下转型不能直接使用需要强制转换int b; b = (int)a;

动态绑定

动态绑定也叫延迟绑定,指的是在执行期间而不是编译时编译所引用的对象的实际类型,根据其实际类型调用其相应的方法。
发生的条件:

  • 要有继承
  • 要有重写
  • 要有父类变量指向子类对象
  • 要有父类变量调用重写的方法
posted @ 2020-04-17 21:50  DengSchoo  阅读(143)  评论(0编辑  收藏  举报