java简介以及补充知识

01_Java平台版本

 * Java平台版本的划分:
     * JavaSE: 标准版
         * 桌面应用.
     * JavaME: 小型版
         * 嵌入式设备, 现在已经被Android取代了.
     * JavaEE: 企业版
         * 主要用于写后台(服务器端)代码的.

 * JDK1.5以前叫法: J2SE, J2ME, J2EE
 * JDK1.5及其以后, 正式更名为: JavaSE, JavaME, JavaEE.
 * Java之父:
     * 詹姆斯·高斯林

02_Java语言的特点

  • Java语言的特点:
    • 开源: 源代码是开放的.
    • 跨平台: 用Java语言编写的程序, 可以在不同的操作系统上运行.
      • 原理: 针对于不同的操作系统, Java提供了不同的jvm(Java虚拟机), 有JVM来保证Java程序的跨平台性.
      • 常见的操作系统: Linux, Windows, Mac
        • 代码的执行流程:
        • 源代码 –> 编译(javac.exe) –> 中间代码(字节码) –> 被JVM识别.

03_JDK的下载和安装

  • JDK和JRE的区别:

    • JDK: Java开发工具包, 包括开发Java程序所需要的常用工具以及 JRE.
    • JRE: Java运行环境, 包括运行Java程序所需要的核心类库 和 JVM.
    • JVM: Java虚拟机,用来保证Java程序跨平台的.
  • JDK的下载:

    • 去官网: www.oracle.com \ www.sun.com下载即可.
  • JDK的安装:
    • 傻瓜式安装, 下一步下一步即可.
    • 注意: 安装路径最好不要出现中文或者特殊符号.

04_path环境变量的配置方式

  • 方式一: 直接把路径粘贴到 path环境变量中即可. //理解

    • 右键选择”计算机” –> 选择”属性” –> 选择”高级系统设置” –>
    • 选择”高级” –> 选择”环境变量” –> 在系统变量中的 path中,粘贴 jdk的bin路径.
  • 方式二: 采用JAVA_HOME变量的方式配置 //掌握

    • 右键选择”计算机” –> 选择”属性” –> 选择”高级系统设置” –>
    • 选择”高级” –> 选择”环境变量” –> 选择系统变量中的”新建”,新建一组键值对:
      • 键: JAVA_HOME
      • 值: JDK的安装路径(不带最后的bin)
    • –> 选择系统变量中的”path”, 然后再path前边写上: %JAVA_HOME%\bin;

      编译指令: javac.exe 文件名.java
      运行指令: java 类名

05_三元运算符

  • 格式:
    • 条件 ? 表达式1 : 表达式2;
  • 执行顺序:
    • 先判断条件是否成立, 成立走表达式1,不成立走表达式2.

06_switch-case语句

  • 格式:
    switch(变量) {
    case 值1:
    执行的语句;
    break;
    case 值2:
    执行的语句;
    break;
    …. //好多case
    default:
    执行的语句;
    break;
    }

    实现: 定义一个方法,传入一个数, 如果是1-7就输出: 对应的星期数, 否则输出: 无效日期.

  • 细节:

    • 问题一: break 能省略吗?

      • 最后一个break可以省略,对结果没有影响, 其他的break如果省略的话,可能会发生case穿透.
    • 问题二: if 语句和 switch 语句的应用场景有什么区别?

      • 当判断的是 区间 的时候, 就考虑用 if 语句.
      • 当判断的是 固定值 的时候, 就考虑用 switch 语句.
    • 问题三: switch 后边的小括号中可以放什么?

      • JDK1.5以前: int, short, char, byte
      • JDK1.5: 可以放枚举
      • JDK1.7: 可以放 String

07_方法重载

  • 概述:

    • 同一个类中,
    • 出现方法名相同
    • 但是参数列表不同(参数个数不同,参数对应的数据类型不同)的
    • 两个或以上的方法时, 称为方法重载.
    • 方法重载与返回值类型无关.

    方法重写

    • 概述:
      • 子父类间,
      • 子类出现和父类一模一样的方法时,称为方法重写.
      • 要求返回值类型也必须一模一样或者有子父类关系.
  • 什么时候用方法重写?

    • 当子类需要沿用父类的方法, 而方法主体又有自己独有需求的时候,就可以考虑使用方法重写.

08_局部变量和成员变量的区别以及对象的创建过程 Person ## show() **

  • 局部变量和成员变量的区别:
    • a. 定义位置不同
      • 成员变量: 定义在类中, 方法外.
      • 局部变量: 定义在方法中 或者 方法的声明上.
    • b. 生命周期不同
      • 成员变量: 随着对象的创建而存在, 随着对象的消失而消失.
      • 局部变量: 随着方法的调用而存在, 随着方法的调用完毕而消失.
    • c. 在内存中的存储位置不同
      • 成员变量: 存在 堆中.
      • 局部变量: 存在 栈中.
    • d. 初始化值不同
      • 成员变量: 有默认初始化值. 比如说: String类型的默认值是null, int类型的默认值是:0
      • 局部变量: 没有默认初始化值,想使用必须先声明,再赋值,然后才能使用.
  • 内存的划分:

    • 栈:
      • 概述:
        • 存的是局部变量, 以及所有代码的执行.
        • 用完就立马释放(方法执行完立马弹栈).
      • 执行特点:
        • 先进(压栈)后出(弹栈).
        • 举例: 手枪的子弹夹.
    • 堆:

      • 概述:
        • 存是的 所有new出来的东西.
    • 方法区:

      • 方法区, 常量池, 静态区, 代码区(存的是字节码文件)
    • 本地方法区:
    • 寄存器:

09_ Properties 集合类

    Properties集合是一个双列集合, 键值都是String类型. 它表示了一个持久的属性集
    跟io流处理配置文件  

    Properties prop = new Properties();
    // 获取配置文件里面的数据
    prop.load(new FileInputStream("config.properties"));

    // 修改config.properties里面的数据
    prop.setProperty("name", "wangwu");

    // 保存数据
    prop.store(new FileOutputStream("config.properties"),"itheima");

    System.out.println(prop);

    // 遍历Properties对象

// Enumeration en = prop.propertyNames();
// while(en.hasMoreElements()) {
// String key = (String)en.nextElement();
// String value = prop.getProperty(key);
// System.out.println(key+”…”+value);
// }
// System.out.println(prop);

10_对象流进行IO流的对象读写

对象流的作用就是对象从内存写到文件中,或者将文件读取到内存中,这个过程叫序列化(写出),写出就是反序列化(读取)
ObjectInputStream
ObjectOutputStream

Person p = new Person();
    p.name = "jack";
    p.age = 19;

// p.show();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(“a.txt”));
Object obj = ois.readObject();
Person p2 = (Person)obj;//p2 存储的是a.txt文件中存储的对象
p2.show();// jack…19
ois.close();

// // 创建一个对象输出流
// ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(“a.txt”));
// // 写入数据
// oos.writeObject(p);
// // 关闭流
// oos.close();
System.out.println(“搞定”);

11__内存输出流

  • 需求:

    • 调用read(byte[] bys)方法, 将a.txt中的”你好你好”内容读取出来, 并打印到控制台上.
    • 要求: 数组的长度定义为: 5.
      ByteArrayOutputStream
      内存输出流:
      // 把整个内存当成一个缓冲区,可以往里面存储数据,然后可以从内存中一次性获取所有的数据
      // 内存输出流是没有关联文件的,所以不需要关闭流进行释放资源
      // 1.创建字节输入流对象
      FileInputStream fis = new FileInputStream(“a.txt”);
      // 2.内存输出流对象
      ByteArrayOutputStream bos = new ByteArrayOutputStream();
      // 2.定义一个字节数组,用来存储读取到的字节数组数据
      byte[] bys = new byte[5];
      // 定义一个变量.用来存储读取到的有效字节数
      int len = 0;
      //3.循环读取数据
      while((len = fis.read(bys)) != -1) {
      // 打印到控制台
      bos.write(bys, 0, len);
      // System.out.println(new String(bys, 0, len));
      }
      // 从内存中一次性获取所有的数据
      System.out.println(bos.toString());

      // 关闭流
      fis.close();
      System.out.println(“搞定”);

12_ StringBuilder 和 StringBuffer 的反转字符串和拼接字符串的方法

    详见API文档

13_HashSet集合 *************

  • ArrayList集合:

    • 有序(存取顺序一致), 可重复.
  • HashSet集合:

    • 无序(存取顺序不一致), 唯一.

      ArrayList list2 = new ArrayList<>();
      for(String str : list) {
      if(!list2.contains(str)) {
      // 说明list2集合中没有这个元素 , 添加
      list2.add(str);
      }
      }
      System.out.println(list2);

      HashSet set = new HashSet<>();
      set.addAll(list);
      // 清空list集合
      list.clear();
      list.addAll(set);
      System.out.println(list);

14_枚举 ***********

枚举是一种新的类型,允许用常量来表示特点的数据片段
作用:其实就是用来表示一些固定的值
需求:定义一个方法,传入一个性别,如果是男,输出男孩好威猛,如果是女,输出女孩好美丽,如果是妖,输出来自泰国吧,如果是其他的,就显示输错

public enum Direction {
    UP,
    DOWN,
    LEFT,
    RIGHT
}

15_包 ******

  • 概述:
    • 其实就是文件夹, 用来区分重名文件的.
  • 格式:
    • package 包名1.包名2.包名3…;
  • 包的命名规则:
    • 包名全部小写, 多级包之间用.隔开, 包名一般是公司的域名反写.

16_Object类的介绍 **

查看API文档

17_instanceof关键字 *************

  • 使用格式:
    • 对象名 instanceof 数据类型
  • 解析:
    • 判断前边的 对象(名) 是否是 后边的数据类型.
  • 案例:

    • 已知猫类和狗类他们都有吃饭的方法, 不同的是猫吃鱼, 狗吃肉.
    • 猫独有自己的抓老鼠方法: catchMouse();
    • 狗独有自己的看门方法: lookHome();
    • 在测试类中定义一个方法method(Animal an),

      • 如果传入的是猫类对象, 就调用其: 吃饭, 抓老鼠的方法
      • 如果传入的狗类对象, 就调用其: 吃饭, 看门的方法
        // 非静态方法: 编译看左边,运行看右边
        // 静态方法: 编译看左边,运行看左边
        // 成员变量; 编译看左边,运行看左边
        public static void method(Animal an) {
        an.eat();
        if(an instanceof Cat) {
        ((Cat) an).catchMouse();
        }

      if(an instanceof Dog) {
      ((Dog) an).lookHome();
      }
      }

18_并发修改异常 *******************

 * 并发修改异常:
 * 在遍历集合的同时, 又往集合中添加(或删除)元素, 就有可能发生并发修改异常.

* 解决方案:
* 方案一: 可以通过列表迭代器解决, 但是必须调用列表迭代器的添加(或删除)方法.
1.通过集合获取对应的列表迭代器对象 ListIterator listIterator = list.listIterator();
2.通过列表迭代器方法hasNext()方法判断有没有下一个元素
3.有就获取下一个元素 next();
* 方案二: 使用 CopyOnWriterArrayList集合. (它的用法和ArrayList基本类似, 它本身已经处理了并发修改异常),
这个集合要求掌握, 后边做坦克大战的时候要用到.

19_Collections工具类 ******

  • Collections工具类中的方法:
    • sort(); //排序(默认是升序排列)
    • reverse(); //反转
    • shuffle(); //随机置换(洗牌)
    • max(); //求最大值
    • min(); //求最小值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值