Java基础中的基础—- Java语法必背规律

简介: Java基础中的基础—- Java语法必背规律

1、indexOf题目,若需要寻找 子串"ab"的所有出现索引,

规律: 
    1、定义查找的起始索引start,从0开始   int start = 0;
    2、每次从起始索引查找。          int index = 字符串.indexOf("ab",start);
    3、查找完毕,起始索引 = 找到的索引+1     start = index+1;

2、遍历中,判定当前是否为最后一个元素。

if(i==arr.length-1){
    //最后一个元素
  }

3、若要将现在时间,向后推 1天 /1周 /1年

规律:
    1、获取当前毫秒值       getTime();
    2、当前毫秒值+1天 /1周 /1年    
                  当前毫秒值+1000L*60*60*24;
                  当前毫秒值+1000L*60*60*24*7;
                  当前毫秒值+1000L*60*60*24*365;
    3、设置毫秒值     setTime(毫秒值);

4、补0操作

String m = 值 <= 9 ? "0" + 值 : "" + 值;

5、涉及到 两个字符串日期 进行时间差值运算(相差多少天、相差多少年)

步骤:
  字符串--SimpleDateFormat--》日期--getTime()--》毫秒值-- 未来日期-过去日期 --》天  (1000/60/60/24)
  字符串--SimpleDateFormat--》日期--getTime()--》毫秒值-- 未来日期-过去日期 --》年  (1000/60/60/24/365)

6、日历类的月份设置 月份-1

日历类对象.set(2019,12-1,31,23,59,59);

7、

//字符串 转 日历类 【常见】

//字符串---》日期---》日历
        String str3 = "2019年11月11号";
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy年MM月dd号");
        Date d3 = sdf3.parse(str3);
        Calendar c3 = Calendar.getInstance();
        c3.setTime(d3);
  //日历类 转 字符串【常见】
    //日历===》日期====》字符串
    Calendar c4 = Calendar.getInstance();
    Date d4 = c4.getTime();
    SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy年MM月dd号");
    String str4 = sdf4.format(d4);

8、Calendar日历注意:

设置月份  真实月份-1    获取月份   获取月份+1

9、指定日期是星期几

Calendar c = Calendar.getInstance();
    c.setTime(date);
    //4、获取星期几
    int day = c.get(Calendar.DAY_OF_WEEK);    
  周日 1    周一 2   .....   周六 7   switch

10、计算某个程序运行时间:

//1、记录程序开始前的毫秒值
      //2、开始运行程序
      //3、记录程序结束后的毫秒值
      //4、运行时间 = 结束后-开始前
long startTime=System.currentTimeMillis();//获取开始时间
/*
测试程序代码;
*/
    long endTime=System.curr   entTimeMillis();//获取结束时间
    System.out.println("运行时间是:"+(startTime-endTime)+"ms");//输出运行时间

11、基本数据类型作为参数和返回值:传递真正数据。

相当于方法A把数据复制了一份传递给方法B,方法A和B各操作各自的数据

引用数据类型作为参数和返回值:传递地址值。 
        因为方法A将地址传递给方法B,导致A和B两个方法 操作同一个堆内存对象

12、自定义类,若需要调用ArrayList集合的contains方法,自定义类需要idea生成hashCode和equals方法

若姓名和性别相同,为同一个人,

Person类中要在生成两个方法时,同时勾选name和sex

类似的集合有:
  ArrayList     contains
  LinkedList      contains
  HashSet       add
  HashMap       containsValue    containsKey    put
  LinkedHashMap   containsValue    containsKey    put

13、Person p1 = new Person(“小宝”,“007”,“传智专修学院A302”);

//需要打印: 小宝-007-传智专修学院A302

System.out.println(p1);// p1.toString() 默认打印:地址 在于写:toString方法

14、

·数字类型之间有转换:

byte short int long float double

小转大: 例如: int ----> double     隐式自动转换
  大转小: 例如: double ---> int      强制手动转换
                    例如:    double a = 10.5;
                          int b = (int)a;
                    特殊:+=
                    double a = 10.5;
                    int b = 1;
                    b+=a;//隐式强制转换
·基本数据类型---》字符串:
  ①【频繁】   ""+基本数据类型    
  ②   String 返回值 = String.valueOf(基本数据类型);
  ③   基本数据类型.toString(基本数据类型);
   【频繁】 基本数据类型.toString();
·字符串---》基本数据类型:
  如果出现了不能转换的字符,直接报错。
  int x = Integer.parseInt(字符串);//只能转整数
  double x = Double.parseDouble(字符串);//只能转小数,转整数 小数位会补0
  boolean x = Boolean.parseBoolean(字符串);//只能转布尔

15、普通for:进行遍历中,添加/删除 元素

增强for:进行正向逐个遍历(不能修改集合的长度-添加/删除不能进行)

迭代:进行遍历中 删除 元素

16、

去重复判断:

HashSet集合, add方法,返回false,说明为重复元素

HashMap集合: get方法,返回值不为null,说明为重复元素

containsKey, 返回值为true,说明集合中存在该key,key是重复的

containsValue,返回值为true,说明集合中存在该value,value是重复的

17、

切割步骤:
      //1、获取字节数组
      byte[] arr = str.getBytes("utf-8");
      //2、定义切割的起始索引,默认0
      int startIndex = 0;
      //3、定义变量,保存一次切割几个字节 (切割长度) 
      int len = 2;
      //4、循环( 起始索引没有超过 数组的最大索引,就能继续切割 )
      while (startIndex<=arr.length-1){
        //若 起始索引+长度 > 最大索引,会导致索引越界
        if(startIndex+len>arr.length-1){
          FileUtils.writeByteArrayToFile(new File("文件"),arr,startIndex,arr.length-startIndex);
        }else{
          //正常切割
          FileUtils.writeByteArrayToFile(new File("文件"),arr,startIndex,len);
        }
        //切割完成,起始索引需要向后推移
        startIndex += len;
      }
切割技巧总结:
      1、循环条件:                    startIndex<=arr.length-1
      2、当会出现索引越界时,从起始索引,切割到数组最后:  数组长度-起始索引
      3、切割结束,起始索引向后推移:                      起始索引+=切割长度;
合并步骤:
      1、查找并获取要合并的碎片文件集合
      2、按指定顺序遍历碎片文件集合 【难点】
      3、遍历一个碎片文件,就变为字节数组,追加写入合并文件
         遍历结束,文件合并结束
      合并三要素:
          ①确保获取的文件集合正确
          ②确保碎片是按指定顺序遍历 
          ③确保是追加方式写入合并文件
      合并示例代码:
      public static void main(String[] args) throws IOException {
        //1、获取当前目录下,所有扩展名是 x 的文件,不用查找子目录
        Collection<File> list = FileUtils.listFiles(new File("./"), new String[]{"x"}, false);
        //2、遍历获取的文件
        for (File file : list) {
          //3、遍历中,每个文件变为字节数组,以追加方式写入合并文件
          //3.1、获取当前文件的字节数组
          byte[] arr = FileUtils.readFileToByteArray(file);
          //3.2、把字节数组以追加方式写入合并文件
          FileUtils.writeByteArrayToFile(new File("测试题10.png"),arr,true);
        }
      }

18、文件复制(仅作了解)

//1、定义输入流、输出流
      FileInputStream fis = new FileInputStream("");
      FileOutputStream fos = new FileOutputStream("");
      //2、定义字节数组,长度是1024
      byte[] arr = new byte[1024];//1kb
      //3、定义每次读取的数据长度
      int len = -1;
      //4、while循环
      while((len = fis.read(arr))!=-1){
        fos.write(arr);
      }
      //5、关流倒着关
      fos.close();
      fis.close();

19、方法重写:

返回值类型说明:子类的返回值类型可以 和 父类相同甚至更窄。

Object
    -----X1
      -----X2
        -----X3
  父类返回值类型:X1
  子类返回值类型:X1 X2 X3

20、

·(调用成员方法)如何判断this:

最初调用方法时,调用方法的对象是谁,在此次执行中,this表示的就是谁

·(调用成员变量、构造方法)如何判断this:

this关键字在哪个类,就表示哪个类的内容

·关键字如何执行成员方法:
  在类中未找到该方法,去父类中寻找。若父类也找不到,继续去父类的父类中寻找;
  若整个继承树都没有该方法,直接编译报错
·关键字如何执行变量:
  就近原则:局部》》本类成员变量》》父类成员变量
  若整个继承树都找不到该变量,编译报错
·关键字调用构造方法:
  构造方法的第一句若无this或super,Java自动补super()
  Object无参构造一定执行
  this或super调用构造方法,只能出现在构造方法的第一句,只能出现一次
·super表示当前类父对象(直接找super代码所在类的 父类即可)

21、多态转换规律:

Person父,Student子

大 小

继承树上,越往上,越大。 最大的类:Object

小转大(Student--》Person):自动转换,子当父用。  两方存在 继承关系 或 实现关系,就可以通过编译
  大转小(Person--》Student):手动强转。 父当子用, 仅做回自己时(或做回自己的向上类型【接口、父类】),可以执行成功
                 注:不能转为无关类型 或 无法做回自己的向下类型
    例如:Student stu1 = new Student();
        Person per1 = stu1;
        //做回自己
        Student stu2 = (Student) per1;

22、多态中变量、常量、方法的使用规律:

·成员变量、static成员变量、常量、static方法:
        编译是否报错,看左边,执行效果如何,看左边-------------》【编译看左,执行看左】
        例如:Person父,Student子
          Person p2 = new Student();
          调用成员变量,看Person中是否存在该成员变量,决定编译是否报错
          执行效果,看Person中该变量的值,决定了执行效果
      ·非static成员方法:
        编译是否报错,看左边,执行效果如何,看右边-------------》【编译看左,执行看右】

23、instanceof 判断为true有三种情况:

 对象就是该数据类型

 对象和类型之间存在继承关系(向上判断)

 对象和类型之间存在实现接口关系(向上判断)

24、聚合关系:

一对多:一个A中有多个B

A类{
private ArrayList blist = new ArrayList<>();
//get set方法
}
一对一:一个A中有一个B
        A类{
          private B类 b;
          //get set 方法
        }

25、代码块:

如果类中有静态代码块、构造代码块、构造方法
  执行顺序:
    第一次使用该类:  先所有的静态代码块----》再所有的构造代码块----》最后执行构造方法
    第N次使用该类:   再所有的构造代码块----》最后执行构造方法
  存在父子继承关系时:
    第一次使用该类:父静态代码块--》子静态代码块---》父构造代码块---》父构造方法----》子构造代码块----》子构造方法
    第N次使用该类: 父构造代码块---》父构造方法----》子构造代码块----》子构造方法

26、访问权限:

一个内容,定修饰符之前要考虑:

任意地方用:public
          当前类内部用:private
          仅 子类能用 并且 同包也能用:protected
          仅 同包能用:无修饰符

27、迭代器删除元素:

固定代码:

Iterator it = 集合.iterator();
while (it.hasNext()){
类型 值 = it.next();
if(条件判断){
//符合要求,进行删除
it.remove();
}
}

28、快速数字排序:

从小到大: Collections.sort(集合);

从大到小:  Collections.sort(集合);
             Collections.reverse(集合);

1、排序:【必考点,非难点】

外比较器:Comparator Collections的sort方法的参数中(频率极高)

compare 返回值:负数,就会交换两个元素

Collections.sort(待排序的集合,new Comparator(){
        @Overried
        public int compare(Object o1,Object o2){
          //升序  从小到大  
          //return o1-o2;
          //降序  从大到小
          //return o2-o1;
        }
      });
  内比较器:Comparable  需要让排序类,实现该接口(频率低)
      compareTo 返回值:负数,就会交换两个元素
          //升序  从小到大  
          //return this-o2;
          //降序  从大到小
          //return o2-this;
  注意:
    若 无法直接返回int值,就进行if判断,判断何时返回 正数,何时返回负数

2、

静态内部类访问:Outer.Inner x = new Outer. Inner();

成员内部类访问:Outer.Inner x = new Outer().new Inner();

记录:Inner前若有new ,必须连接前面的()

3、异常处理机制:

·抓住异常,悄悄处理:try … catch

一般用于处理常见异常,出现了该异常,知道应该做哪些处理。
          例如:
            用户登录时,若用户名为空,提示:请输入用户名
              String username = null;
              try{
                username.split(",");
              }catch(Exception e){
                System.out.println("请输入用户名");
              }
·不管异常,抛出去:   方法() throws 非运行时异常
          一般用于处理异常时,不明确/不知道 拿到某个异常该做什么。
          例如:
            用户查询,查询 用户.txt 文件,查询并展示所有用户信息
          分析:若  用户.txt文件找不到,会报FileNotFoundException,
              但题目没有说明,遇到该异常应如何处理,应该抛出去。
            public static void main(String[] args) throws FileNotFoundException{
              List<String> xlist = FileUtils.readLines(new File("用户.txt"),"utf-8");
            }

4、

throws: 写在方法声明上

一个抛出多个异常,用逗号分隔

用法:抛出异常

注意:throws一般抛出非运行时异常,

运行时异常不用throws,默认方法抛出

throw:  写在方法体中
    一次抛出一个异常,一般抛出后,方法会结束
    用法:用来生成新异常
    注意:
      throw生成的异常,可以是异常树上的任意异常

5、编码技巧:方法返回数据:

注意:

方法只能有一种数据被返回:

要么是方法返回值,要么是抛出的异常

例如:控制台输入一个整数,若整数大于10,返回true,否则返回false

·`方法返回值:传递任意类型数据
      示例代码:
        public static void main(String[] args){
          boolean f = run1();
        }
        public static boolean run1(){
          int x = new Scanner(System.in).nextInt();
          if(x>10){
            return true;
          }else{
            return false;
          }
        }
    ·`异常信息:仅能传递 字符串 数据
      示例代码:
        public static void main(String[] args){
          boolean f;
          try{
            run1();
          }catch(Exception e){
            String str = e.getMessage();
            f = Boolean.parseBoolean(str);
          }
        }
        public static void run1(){
          int x = new Scanner(System.in).nextInt();
          if(x>10){
            throw new RuntimeException("true");
          }else{
            throw new RuntimeException("false");
          }
        }

6、finally规律:

finally外的代码是否执行,主要看当前try…catch…finally中是否有执行throws或return

若出现,则无法执行finally外的代码,因为方法被结束了

7、继承中的异常抛出和返回值类型

子类抛出异常/子类返回值类型  ≤  父类抛出异常/父类返回值类型 
  例如:
      Object
        ------X1
          ------X2
            ------X3
      返回值类型:父X1   子X1、X2、X3
      抛出异常:父X1     子X1、X2、X3


目录
相关文章
|
3月前
|
Java
Java基础语法与面向对象
重载(Overload)指同一类中方法名相同、参数列表不同,与返回值无关;重写(Override)指子类重新实现父类方法,方法名和参数列表必须相同,返回类型兼容。重载发生在同类,重写发生在继承关系中。
156 1
|
3月前
|
存储 SQL NoSQL
Redis-常用语法以及java互联实践案例
本文详细介绍了Redis的数据结构、常用命令及其Java客户端的使用,涵盖String、Hash、List、Set、SortedSet等数据类型及操作,同时提供了Jedis和Spring Boot Data Redis的实战示例,帮助开发者快速掌握Redis在实际项目中的应用。
300 1
Redis-常用语法以及java互联实践案例
|
4月前
|
算法 Java 测试技术
零基础学 Java: 从语法入门到企业级项目实战的详细学习路线解析
本文为零基础学习者提供完整的Java学习路线,涵盖语法基础、面向对象编程、数据结构与算法、多线程、JVM原理、Spring框架、Spring Boot及项目实战,助你从入门到进阶,系统掌握Java编程技能,提升实战开发能力。
233 0
|
4月前
|
存储 Java 容器
Java基本语法详解
本文深入讲解了Java编程的基础语法,涵盖数据类型、运算符、控制结构及数组等核心内容,帮助初学者构建坚实的编程基础。
|
5月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
248 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
5月前
|
存储 Java 程序员
Java 基础知识点全面梳理包含核心要点及难点解析 Java 基础知识点
本文档系统梳理了Java基础知识点,涵盖核心特性、语法基础、面向对象编程、数组字符串、集合框架、异常处理及应用实例,帮助初学者全面掌握Java入门知识,提升编程实践能力。附示例代码下载链接。
213 0
|
5月前
|
存储 安全 Java
从基础语法到实战应用的 Java 入门必备知识全解析
本文介绍了Java入门必备知识,涵盖开发环境搭建、基础语法、面向对象编程、集合框架、异常处理、多线程和IO流等内容,结合实例帮助新手快速掌握Java核心概念与应用技巧。
126 0
|
6月前
|
存储 安全 Java
2025 年最新 40 个 Java 基础核心知识点全面梳理一文掌握 Java 基础关键概念
本文系统梳理了Java编程的40个核心知识点,涵盖基础语法、面向对象、集合框架、异常处理、多线程、IO流、反射机制等关键领域。重点包括:JVM运行原理、基本数据类型、封装/继承/多态三大特性、集合类对比(ArrayList vs LinkedList、HashMap vs TreeMap)、异常分类及处理方式、线程创建与同步机制、IO流体系结构以及反射的应用场景。这些基础知识是Java开发的根基,掌握后能为后续框架学习和项目开发奠定坚实基础。文中还提供了代码资源获取方式,方便读者进一步实践学习。
1718 2
|
6月前
|
存储 安全 Java
Java 基础知识面试题汇总 最全面的 Java 基础面试题整理
本文全面解析Java基础知识面试题,涵盖Java基础概念、面向对象编程、异常处理、集合框架等核心内容。通过实际应用场景,提供技术方案与应用实例,如JDK与JRE区别、==与equals()差异、String类特性、final与static关键字用法、多继承替代方案及接口与抽象类对比。帮助开发者夯实基础,高效备考,提升实战能力。附带完整代码示例,可供下载学习。
774 3
|
7月前
|
IDE Java 开发工具
【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
IntelliJ IDEA创建Java项目的图文详细步骤,手把手带你创建Java项目
1198 10
【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤