多态中的转型谷

Demo

package obj;

/**
 * 多态中的转型谷
 */
public class Dome {
    public static void main(String[] args) {
        /**
         * 实例化基类
         */
        //多态 - 向上转型
        Animal c = new Cat();
        System.out.println(c.name); // 动物
        //System.out.println(c.age); //报错,因为 Animal类中没有age属性
        c.skill(); //抓老鼠



        System.out.println("-------------------");

        //子类正常调用方式
        /*Cat c1 = new Cat();
        System.out.println(c1.name);//猫
        System.out.println(c1.age);//5 不报错,因为 Cat 类中有age属性
        c1.skill();//抓老鼠*/


        /**
         * 以上方法虽然能够调用到子类中的属性
         * 但是 是实例化的一个新的对象
         *
         * 通过转型(向下转型将实例化的 Animal对象的实例转换成子类 )
         * Cat a = (Cat)Cat();
         */
        //向下转型
        Cat a = (Cat) c;//将 Animal对象的实例转换成子类
        System.out.println(a.age);//5




    }
}

基类

package obj;

public class Animal {
    String name = "动物";

    public void skill()
    {
        System.out.println("警惕");
    }
}

子类

package obj;

public class Cat extends Animal{
    String name = "猫";
    byte age = 5;

    public void skill() {
        System.out.println("抓老鼠");
    }
}

Java多态

Demo:

package obj;

/**
 * 多态
 */
public class Dome {
    public static void main(String[] args) {
        /**
         * 多态的实现方式:
         * 1、类型定义的是基类   Animal
         * 2、实例化的是派生类   Cat
         * 通过基类调用其中的方法和属性
         *
         * NOTE:
         * 通过基类调用属性,返回的是基类中的属性
         * 通过基类调用方法,返回的是子类中重写的方法
         */
        //多态
        Animal c = new Cat();
        System.out.println(c.name); // 动物
        //System.out.println(c.age); //报错,因为 Animal类中没有age属性
        c.skill(); //抓老鼠



        System.out.println("-------------------");

        //正常调用方式
        Cat c1 = new Cat();
        System.out.println(c1.name);//猫
        System.out.println(c1.age);//5 不报错,因为 Cat 类中有age属性
        c1.skill();//抓老鼠


    }
}

基类:

package obj;

public class Animal {
    String name = "动物";

    public void skill()
    {
        System.out.println("警惕");
    }
}

派生类:

package obj;

public class Cat extends Animal{
    String name = "猫";
    byte age = 5;

    public void skill() {
        System.out.println("抓老鼠");
    }
}

多态.png

ArrayList

package gather;


import java.util.ArrayList;

/**
 * 集合之ArrayList
 * 集合的特点:
 * 一种存储空间可变的存储模型,存储的数据容量可以发生改变
 * ArrayList<E>
 *     E:表示集合中存储的元素类型 如创建Study类的集合,则为Study
 */
public class ArrList {
    public static void main(String[] arge) {
        ArrayList array = new ArrayList<String>();
        System.out.println(array);//[] 该集合还没有元素

        //添加元素
        //ArrayList.add()
        array.add("Hello");
        array.add(" ");
        array.add("Java");
        System.out.println(array);//[Hello,  , Java]

        //指定位置添加元素
        array.add(1,"location");
        System.out.println(array);//[Hello, location,  , Java] 原索引的元素被挤到后一位去了(后面所有索引+1)

        //指定不存在的索引添加 - 报错(集合越界)
        //array.add(5,"what"); //IndexOutOfBoundsException 和数组一样,产生索引越界 这里是集合越界

        //修改指定元素
        array.set(1,"王炸");
        System.out.println(array);//[Hello, 王炸,  , Java]

        //查看指定元素
        System.out.println(array.get(0));//Hello

        //查看集合中的个数
        System.out.println(array.size());//4

        //删除元素
        array.remove(2);
        System.out.println(array);//[Hello, 王炸, Java]

     

    }
}

Java中的数组

package array;

/**
 * 数组必须初始化后才能使用
 * 初始化分为:
 * 1、动态初始化
 *     初始化时只指定数组长度,由系统为数组分配初始值
 * 2、静态初始化
 *
 * NOTE:
 * 定义在局部中的变量为:栈内存
 * 存储new出来的内容为:堆内存
 * 每个new出来的数据都会有一个地址值,在数据使用完后会在垃圾回收器空闲时回收(非主动销毁)
 */
public class ArrarInit {
    public static void main(String[] arge)
    {
        //动态初始化
        int[] arr = new int[3];
        //输出数组第一个元素
        System.out.println(arr);//I@16b98e56 打印数组,返回的是数组在内存中的内存地址


        //静态初始化 定义了3个元素
         int[] arrb = {1,2,3};
         System.out.println(arrb[0]);
         System.out.println(arrb);//I@7ef20235



    }
}

IntelliJ IDEA 构建Java项目

IntelliJ IDEA官网现在有免费的社区版,可以直接下载
选择文件->新建->项目
IntelliJ IDEA 创建Java项目01.png
选择Java模块->项目SDK选择Java安装目录
IntelliJ IDEA 创建Java项目02.png
新建项目->输入项目名称->选择项目保存位置
IntelliJ IDEA 构建Java项目03.png
在创建好的项目中点击自动生成的src目录->新建->包
IntelliJ IDEA 构建Java项目04.png
输入包名
IntelliJ IDEA 构建Java项目05.png
点击包->新建->Java类
IntelliJ IDEA 构建Java项目06.png
输入类的文件名
IntelliJ IDEA 构建Java项目07.png
在新建类文件中编写测试代码
IntelliJ IDEA 构建Java项目08.png
点击右键选择运行,省却终端编译操作步骤
IntelliJ IDEA 构建Java项目09.png
运行结果在底部区域查看

Java变量

变量注意:

  1. 变量名不能重复
  2. 变量必须初始化(未赋值不能使用)
  3. 整数类型变量默认数据类型是int,赋值时为防止类型不兼容需要在数值后面加上L(表示转换为long类型)
  4. 浮点类型变量,默认数据类型是double,赋值时为防止类型不兼容需要在数值后面加上F(表示转换为float类型)

数据类型转换:
微信截图_20201208115313.png
1. 自动转换

public class demo1 {
    public static void main(String[] arge){
        char a = 'a';
        int b = a;

        System.out.println(b);
    }
}

2. 强制转换类型:

public class demo1 {
    public static void main(String[] arge){
        //强制类型转换
        float a = 88.88F;
        int z = (int) a;
        System.out.println(z);//88
    }
}

NOTE:

  1. 自动转换类型只能由 低数值范围 的数据转换到 高数值范围 的数据
  2. 强制类型转换可以由高数值范围转换为低数值范围的数据,但是必须指定转换的数据类型

Java数据类型

常量:

  1. 字符串常量:用双引号括起来的内容
  2. 整数常量:不带小数点的整数,包括正数和负数
  3. 小数常量:带小数点的数字
  4. 字符常量:用单引号括起来的内容
  5. 布尔常量:true、false
  6. 空常量: null

基本数据类型:

1. 数值型:

  • 整数(byte,short,int,long)
  • 浮点数(float,double)
  • 字符(char)

2. 非数值型:

  • 布尔(boolean)

    用数据类型:

  • 类(class)
  • 接口(interface)
  • 数组([])

数值型的取值范围:
微信截图_20201208112624.png

java学习之运行流程

java 运行流程:
编写源文件 > 转换字节码 > 解释器执行

5-1ZZ41409331Y.png

  1. 源文件是我们编写代码时的.java文件
  2. 字节码文件是我们编写玩的.java文件用javac命令编译转换的.class文件
  3. 解释器执行的是编译完成的.class文件
  4. 所有的Java程序运行必须经过以上三个步骤(编写、编译、运行)

关于字节码文件:

  1. 字节码文件(.class)是与任何机器环境和操作系统环境无关的中间文件,它是一种二进制文件,是java源文件编译后产生的目标代码文件
  2. 编程人员和计算机都无法读懂编译后的字节码文件,必须由Java解释器来解释执行
  3. java虚拟机(JVM)是运行Java程序的软件环境,而Java解释器是Java虚拟机的一部分,在运行Java程序时,首先会启动JVM,然后由它来负责解释执行Java的字节码程序,并且Java字节码只能运行在JVM之上,这样JVM就可以把Java程序和具体的操作系统环境分离,实现跨平台特性
  4. Java程序通过JVM实现跨平台,但是JVM不是跨平台,也就是说各个操作系统上的JVM是不同的,例如Linux和Windows上的JVM

5-1ZZ4140944b0.png