Java学习记录——基于C++的快速学习

HB小咸鱼学习记录

  • 初中的时候曾经学过一点java,算是程序的敲门砖,但是没想到上了大学最先深入学习的是C语言和C++。21年初这个寒假决定在家系统学习Java和网络编程,发个帖子记录过程,方便今后查看。

【前期准备】

  • Java JDK版本选择的是: "1.8.0_181"
  • 编译器我选择的是: Eclipse
  • 具体环境搭建方法由网络上查询得知,不多说了。
  • 学习地址:(B站永远滴神)

    黑马程序员Java语言入门到精通-【基础+高级】-附全套资料(IDEA版)

【笔记一】 1- 基本语法

  1. C++里的include头文件和Java里的import包机制相似。
  2. C++和Java代码执行的起点都是main函数。
  3. 变量关键字与C++基本一致。值得一提的是,由于Java里没有指针,所以Java中的字符串由字符串变量String储存。使用方法与C++/STL里的string大同小异,记得Java里的String首字母要大写。
  4. Java中申请数组时,分为动态分配和静态分配。动态分配为new申请内存后不设置各初始值,静态分配为new申请内存后直接设置各初始值。
    int[] array1 = new int[3];//动态分配 int[] array2 = new int[]{1,2,3};//静态分配
  5. Java中的数组和字符串都自带类似C++/STL里的方法,例如length()就是获取长度。
  6. 变量类型强制转换和C++一致都可以使用(int)double这样的格式进行转换。
  7. 字符类型与C++一致也是用的ASCII码。
  8. if/else条件判定语句与C++一致。
  9. switch关键字的使用方法与C++一致。
  10. for循环、while循环、do…while循环的使用方法与C++一致。
  11. break和continue的使用方法与C++一致。
  12. Java中类的思路与C++中基本一致。注意Java类中的公/私有标识符不用加 ‘:’ 。
  13. Java中类和方法的声明/使用方法与C++基本一致。
  14. 对于只使用一次的对象,可以使用匿名对象,直接new就行。
  15. final关键字代表最终的,不可改变的。
  16. 外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称(); 直接声明内部类。
  17. 现在的编译器支持自动装箱和自动拆箱。
  18. 包装类除了int–Integerchar–Character,其余都是首字母大写。
  19. 泛型省去了类型转换的麻烦,更加安全,但是只能储存一种数据。
  20. native关键字,代表该方法调用的是本地操作系统的方法。
  21. 当方法的参数类型已经确定,但是参数个数不确定时,可以使用可变参数。
    修饰符 返回值类型 方法名(数据类型…变量名){} 底层为一个数组。

【笔记二】 115-118P Scanner接收类

  1. Java接收输入的方式为调用Scanner类。需要导包:import java.util.Scanner;
  2. 接收数据的方法为:
    字符串-Scanner.next()/Scanner.nextLine();
    其余类型-Scanner.next类型(); 如:int-Scanner.nextInt(); double-Scanner.nextDouble();

【笔记三】 121-124P Random随机数类

  1. Java生成随机数的方式为调用Random类。需要导包:import java.util.Random;
  2. Random类生成随机数的方法和Scanner的方法类似,如Random.nextInt(100); 范围左闭右开,即[0,100),0~99。

【笔记四】 133-142P String字符串类

  1. 不需要导包。
  2. 字符串比较方法:str1.equals(str2); 相同返回true。.equalsIgnoreCase() 忽略大小写。
  3. 字符串长度:str1.length(); 返回字符串长度。
  4. 拼接字符串:str3 = str1.concat(str2); 返回值为新的字符串地址。
  5. 获取字符串指定位置字符:char ch = str1.charAt(1); 返回值为一个char。
  6. 查找子串在主串中第一次出现的位置:int a = str1.indexOf(“abc”); 返回值为第一次出现的索引位置。没有的话返回-1。
  7. 字符串截取方法:
    str2 = str1.substring(5);//从第5号截取到末尾
    str2 = str1.substring(4,7);//从4号截取到6号,左闭右开[4,7)
  8. 字符串转为char数组:char[] chars = “hello”.toCharArray();
  9. 字符串转为byte数组:byte[] bytes = “hello”.getBytes();
  10. 替换字符串内指定内容:String str1 = “how do you do?”.replace(“o”,"*");//h*w d* y*u d*?
  11. 分割字符串:String[] array1 = “aaa.bbb.ccc”.split("\\.");//切成aaa,bbb,ccc三个字符串

【笔记五】 143-147P static静态关键字

  1. 当使用static进行修饰后,被修饰的方法/变量不再属于对象,而是属于类。
  2. 由于不再属于对象,所以带static的方法/变量可以直接被调用
    静态方法:类名称.静态方法();
    静态变量:类名称.静态变量;
  3. 静态不能直接访问非静态,例如静态方法访问非静态变量。
  4. 静态方法里也不能用this。
  5. 对于静态变量初始化,我们可以使用静态代码块。静态代码块只在类第一次被声明时,执行一次。
  6. 静态内容总是优先于非静态。

【笔记六】 148-149P Arrays数组工具类

  1. 需要导包:import java.util.Arrays;
  2. 将数组变为字符串:Arrays.toString();
    int[] a1 = {10,20,30};
    String s1 = Arrays.toString(a1);//[10, 20, 30]
  3. 数组排序:Arrays.sort();
    int[] a1 = {20,10,30};
    Arrays.sort(a1);//10,20,30 默认为升序

【笔记七】 150-151P Math数学工具类

  1. 不需要导包。
  2. 取绝对值:Math.abs(); 与C++一致,但是浮点数类型也是abs(),不是fabs()。
  3. 取平方根:Math.sqrt(); 与C++一致。
  4. 求n次方:Math.pow(a,b); 求a的b次方,与C++一致。
  5. 比大小:Math.max(a,b) / Math.min(a,b); a和b比大小,与C++一致。
  6. 向上取整:Math.ceil();
  7. 向下取整:Math.floor();
  8. 四舍五入:Math.round();
  9. Math包里还有常见的数学值,比如Math.PI是圆周率,Math.E是e值。

【笔记八】 171-184P 接口相关

  1. 接口没有静态代码块和构造方法。
  2. 一个类的父类只有一个,但是一个类可以同时实现多个接口。
    当父类的方法与接口的默认方法冲突,优先父类
    当实现多个接口时存在默认方法冲突,需要对默认方法进行重写。
    当实现多个接口时存在抽象方法冲突,只需要覆盖重写一次即可。
  3. 使用接口首先要定义接口类。
    定义接口类的格式如:public interface 接口名称 { 接口内容 }
  4. 使用接口需要创建接口实现类对接口进行实现。
    接口实现类的格式如:public class 实现类名称 implements 接口名称 { … }
  5. 接口中定义的变量均为常量。
    常量格式如:public static final 数据类型 常量名称 = 数值; 前方三个关键词可省略。
  6. 接口中均为抽象方法,且实现类必须覆盖重写接口所有的抽象方法,除非实现类也是抽象类。(必须覆盖)
    抽象方法格式如:public abstract 返回值类型 方法名称(参数列表);
  7. Java8后,接口中可以定义默认方法。(可覆盖可不覆盖)
    默认方法格式如:public default 返回值类型 方法名称(参数列表) { 方法体 }
  8. Java8后,接口中可以定义静态方法。
    静态方法格式如:public static 返回值类型 方法名称(参数列表) { 方法体 }
  9. Java9后,接口中可以定义私有方法。(我的Java版本是1.8.0也就是Java8,所以不支持)
    普通私有方法格式如:private 返回值类型 方法名称(参数列表) { 方法体 }
    静态私有方法格式如:private static 返回值类型 方法名称(参数列表) { 方法体 }

【笔记九】 185-194P 继承与多态相关

  1. C++继承用冒号,Java继承用关键字extends。
  2. @Override检测是否重写,总体来说,Java的类继承与C++的类继承很相似。
  3. Java不支持多重继承,所以有super关键字,用来找父类。
  4. abstract为抽象关键字。抽象类/抽象方法。
  5. 访问成员变量的规则:
    通过对象名称访问:看声明对象时对象的类型(等号左边),没有就向上找。
    通过成员方法访问:看方法属于谁,就优先用谁的成员变量,没有就向上找。
  6. 实现多态性:父类引用指向子类对象。
    多态格式:
    父类名称 对象名 = new 子类名称();
    接口名称 对象名 = new 实现类名称();
  7. 根据第6条和第7条可知,多态中成员方法优先用子类的成员方法;通过对象名称访问成员变量,优先用父类的成员变量。
  8. “编译看左,运行看右”,即编译前把对象看为父类类型(左边),运行时成员变量看左边,成员方法看右边。
  9. 个人感觉,多态的存在使代码更加有逻辑性。
  10. 向上转型:右侧new一个子类对象,把它当父类来看待。 (无法调用子类特有方法)
  11. 向下转型:将父类对象,还原成为本来的子类对象。
    格式:子类名称 对象名 = (子类名称)父类对象;(有点像强制类型转换)
  12. 对象 instanceof 类名称 :如果对象属于该类,则返回true。使用这个即可根据对象类型,来进行向下转型,使用子类特有方法。

【笔记十】 215-218P Object/Objects根类

  1. 不需要导包。
  2. Object.toString():转换为字符串,默认转换对象的地址值,需重写。
  3. Object.equals(对象):比较对象是否相等,默认比较对象的地址值,需重写。
  4. Objects.equals(对象1,对象2):第二条的equals方法存在空指针异常可能,Objects的equals方法更加完善。

【笔记十一】 219-225P 日期时间类

  • Date类
  1. 需要导包:import java.util.Date;
  2. Date类的空参构造函数为获取当前日期。
  3. Date类的带参构造函数为传入一个long类型的毫秒值,根据毫秒值计算日期。0L为1970年1月1日0点。(中国是东八区加8个小时)
  4. Date.getTime():将日期转换为毫秒值,返回值为long类型。
  • DateFormat类
  1. 需要导包:import java.text.DateFormat;
  2. DateFomat类是一个抽象类,无法直接创建对象,可以使用其子类SimpleDateFormat(String pattern)
  3. SimpleDateFormat类需要导包:import java.text.SimpleDateFormat;
  4. SimpleDateFormat s1 = new SimpleDateFormat(“yyyy年MM月dd日 HH时mm分ss秒”); 构造函数传参按这个格式即可,字母不能变,其余可变。
  5. String str1 = s1.format(Date对象); 将一个Date对象转换为SimpleDateFormat对象中指定格式的字符串。
  6. Date date = s1.parse(“2020年01月04日 20时00分00秒”); 按照SimpleDateFormat对象的格式,转换为一个Date格式对象。
  • Calendar类
  1. 需要导包:import java.util.Calendar;
  2. Calendar类为抽象类,无法直接创建对象。
  3. Calendar c1 = Calendar.getInstance(); 使用多态方法,获取一个Calendar的子类。等号右边方法为获取Calendar的子类。
  4. Calendar.get(字段):返回日历指定字段的数值。例:c1.get(Calendar.YEAR);
  5. Calendar.set(字段,值):设置日历指定字段的数值。例:c1.set(Calendar.YEAR, 2020);
  6. Calendar.add(字段,值):使指定字段增加给定值,可以为负数。例:c1.add(Calendar.YEAR, -2);
  7. Calendar.getTime():将Calendar类转为Date类。例:Date date = c1.getTime();

【笔记十二】 226-226P System系统类

  1. 不需要导包。
  2. System.currentTimeMillis(): 返回以毫秒为单位的当前时间,可以用来计算程序的运行时间。
  3. System.arraycopy(参数1,参数2,参数3,参数4,参数5): 将数组中指定的数据copy到另一个数组。
    参数1 / 参数3:源数组 / 目标数组。
    参数2 / 参数4:源数组中的起始位置 / 目标数组中的起始位置。
    参数5:要复制的数组元素的数量。

【笔记十三】 227-229P StringBuilder字符串缓冲区类

  1. 不需要导包。
  2. 字符串缓冲区,可以提高字符串的操作效率。
  3. String底层为final修饰的数组,而StringBuilder底层是没有被final修饰的数组,可以改变长度。
  4. StringBuilder(): 无参构造函数,默认建议一个空字符串。
  5. StringBuilder(String str): 带参构造函数,建立一个内容为str的字符串。
  6. append(参数): 向对象里添加指定参数内容。返回值为"this",故不用接收返回值。
  7. toString(): 将一个StringBuilder对象转为String对象,返回一个String对象,需要接收。

【笔记十四】 234-281P 容器及其相关*

详情请看我的另一篇文章链接点我
其中介绍了Java容器及其相关内容。

猜你喜欢

转载自blog.csdn.net/qq_45698148/article/details/112385217