Fork me on GitHub

Java 二丢丢

数组

数组也可以用引用类型

数组类型[]数组名

数组遍历

1
2
3
4
int[] num=new int[]{1,2,3,4};
for(int num1:num){
System.out.println(num1);
}

数组必须初始化

  1. ✪动态初始化 (指定数组长度)

    • 数组类型[]数组名=new 数组类型[数组长度];

      1
      int[] arr = new int[5];
    • 数组类型[]数组名;

      数组名=new数组类型[数组长度];

  2. 静态初始化 (不指定数组长度,直接赋值)

    • 数组类型 []数组名=new 数组类型[] {数据值…}
    • 数据类型[] 数组名 = {数据值…}、

局部变量在栈里,new出来的东西在堆里

方法

  1. 定义:把一堆要重复执行的代码封装起来,如果别的程序要用到这段代码,直接调用这个方法名即可

  2. 如何?

    1
    2
    3
    4
    5
    6
    7
    访问修饰符 返回值类型 方法名(参数类型 参数名){

    代码块;

    return 返回值;

    }

    访问修饰符:格式是固定的

    返回值类型:方法最终返回数据类型

    方法名:首字母小写

    参数类型:进入方法的数据类型

    return:返回值返回给调用值

    返回值:方法最终产生的结果

重载

重载和返回类型无关

方法名必须相同,参数列表必须不同

参数个数不同,参数类型不同,参数类型顺序不同

类和对象

一个类不能直接使用,类似一个汽车图纸不能直接跑

需要根据这个类创建一个真正的对象

1
类名 对象名 = new 类名();

如果成员变量没有赋值,会有默认值

成员变量,局部变量区别

  1. 成员变量在堆里,局部变量在栈里
  2. 成员变量声明在类内部,方法外部,局部变量在方法内部
  3. 成员变量有默认值,局部变量没有默认值
  4. 局部变量和成员变量重名时,方法会根据就近原则使用局部变量,为了区分,用this关键字(this关键字可以理解为当前使用或正在创建的对象)

面向对象的三大特性

封装

当我创建好对象以后,如果直接用对象名.属性的方式给属性赋值的话,可能会出现一些不符合实际的情况,所以不考虑“对象名.属性”的方法进行赋值

  1. 属性私有化
  2. 提供公用的get set 方法实现调用
修饰符 类内部 同一个包 子类 任何地方
private
缺省
protected
public

构造方法:

  1. 用来创建对象

  2. 有参构造方法可以直接给属性赋值

    定义构造函数

    1
    2
    3
    public 构造方法名(参数){
    }
    //注意(1.)没有返回值(2.)构造方法名必须和类名完全一致

    构造方法是一个方法,可以重载;

    注意:构造方法如果没有自己定义,系统会自动提供一个无参构造方法;如果自己定义了构造方法,系统不再提供构造方法

super()指向离自己最近的父类

继承

  1. 定义父类

  2. 定义子类 extends

    1
    2
    public class 子类名 extends 父类名{
    }
  3. 子类继承父类之后,可以继承父类所有的属性和方法;

  4. 子类除了通过继承获取父类属性和方法外,还可以定义自己独有的属性和方法

  5. 一个子类只能有一个父类,一个父类可以有多个子类

  6. 重写:子类继承父类之后,如果父类方法满足不了子类要求,子类可以对父类进行重写。

    • 子类的方法名,返回值类型,参数列表必须和父类一样
    • 子类的访问修饰符权限不能小于父类的访问修饰符权限
    • 子类和父类必须同时为“static”或者非“static”

多态

多态就是一个对象的多种形态

使用多态的前提是有继承或接口的实现

  1. 方法的重载和重写是多态

  2. 子类对象的多态性:父类引用指向子类对象(子类必须重写父类方法,而且子类继承了父类)

    1
    2
    3
    4
    5
    6
    7
    Person p2 = new Man();
    p2.eat(); //√
    p2.sleep();//✕
    //通过p2调用man的eat,但不能调用子类独有的方法(编译期间,程序会把p2看成是person类型,而person类种没有子类独有方法,编译不通过,也不能运行)
    //对多态来说,第一行编译看左边,运行看右边
    //如果要调用。需要类型转换
    Man m1=(Man)p2;

static关键字

成员变量:**如果成员变量加了static,那么这个变量不属于对象,属于类本身,实现多个对象之间的数据共享

方法:普通方法需要创建对象才能用,静态方法不用创建对象就可使用;静态方法不能访问非静态成员变量和非静态成员方法,成员方法可以访问静态成员变量

抽象类和接口

如果父类的方法必须被子类重写的话,可以把父类方法定义成抽象方法

抽象方法,抽象类

动物吃饭

特点:

  1. 只有方法定义,没有方法体、
  2. 抽象方法必须在抽象类里
  3. 抽象类不能实例化
  4. 如果想实现抽象类,必须创建一个子类去继承他
  5. 子类继承一个抽象类,必须重写抽象类里所有的抽象方法
  6. 抽象类里可以定义普通方法,
  7. 抽象类里可以定义构造方法

接口(一个特殊的抽象类)

接口就是多个类的共用规范

  1. 接口里面的方法都是抽象方法

  2. 接口中没有变量,都是常量,默认被public static 修饰

    1
    2
    3
    4
    5
    public abstract void start();
    public void add();
    abstract void run();
    void stop();
    //以上都是一样的,接口中抽象方法默认被public abstract修饰
  3. 接口不能实例化,如果用接口,实现接口

  4. 要实现一个接口,必须重写接口里的所有抽象方法

  5. 父类和接口区别:一个类可以实现多个接口,但是只能继承一个类

  6. 接口里不能定义普通方法,也不能定义构造方法

  7. 接口可以继承接口,并且可以继承多个接口

  8. 1
    Traffic tr = new ElectricVehicle();//推荐这种多态,更安全

Java常用类

Object

所有类的父类

equals和==

==:判断基本数据类型值是否相等那个,相等返回true,不相等返回false,在Object类中比较的是地址值

equals:只用在引用数据类型,在Object类中比较的也是地址值,String类重写了Object的equal方法,比较的是值

tostring()

String类也重写了tostring()方法

String

length():返回字符串长度

substring(int startpoint):根据startpoint的值截取字符串,截取后面的所有从0开始

substring(int start,int end):根据start位置开始,直到end结束 ,截取的字符串包含start不包含end

replace(char oldchar,char newchar):把oldchar替换成newchar

split(String regex):把一个字符串根据regex拆分成多个字符串,返回值为数组(可以用for-each读出)

封装类

八种基本数据类型对应的类

主要进行数据类型转成包装类

基本数据类型和包装类互换

装箱:基本数据类型→ 包装类

拆箱:包装类→ 基本数据类型

基本数据类型、包装类→ String

  • 第一种(最简单)
1
2
int a=10;
String str = a + " ";
  • 第二种

    1
    String str1 = String.valueOf(a);

String→基本数据类型、包装类

1
2
String str2 = "1123";
int b=Integer.parseInt(str2);

Date

获取当前系统时间,有数据库,用java.sql

SimpleDateFormat("yyyy-MM-dd HH:mm:ss")对日期进行格式化

format(date):把日期转成字符串

集合框架(升级版数组)

  1. 存多个对象:数组,集合框架
  2. 集合只能存对象
  3. 数组特点:Student[] stu = new Student[10];一旦创建,数组长度不可改变
  4. 集合有collection接口和map接口

List接口

void add(int index, Object ele)加元素

Object get(int index):根据index找元素

Object remove(int index):根据index除指定元素,返回值为删除的内容

Object set(int index,Object ele):根据坐标修内容值,返回值为被修改原内容

size():获取集合长度

map接口

  1. key-value的形式存储,二者什么类型都可

  2. key不可重复,value可以重复,如果key重复,会覆盖之前的数据

  3. 一个key-value称为一个Entry,Entry是不可重复的,无序的,如果键出现重复,会把上一个覆盖掉

  4. key重写了equals方法,保存的内容,不是地址所以

    1
    2
    3
    map.put(new String("aaa"), "bbb");
    map.put(new String("aaa"), "bbb");
    //也会覆盖

主要实现类:

HashMap

Object put (key,value):键值对的方式向map集合中加元素

Object remove(key):根据key除map元素;

Set keyset():询所有的key

Collection values():询所有value

get(key):根据key询value

entryset():获取所有entry返回到set里

泛型

0%