关于Java,我有话要说

一、开局一张图

在这里插入图片描述

二、基础的零零碎碎

  1. path指定访问的路径
  2. path使用Java的软件tomcat,知道Java的安装位置
  3. 在地址栏输入cmd,在当前目录运行命令提示符窗口
  4. tab键自动补全,上键重复上一命令
  5. 类里面可以存在六种修饰方法
  6. static(静态)是指静态变量,生命范围大于作用范围。
  7. 方法前面加static是指这个方法属于整个类。
  8. 类的作用,保存代码
  9. Java命令后跟类名
  10. class path指定字节码文件的位置,即类的位置
  11. Java有两种数据类型
  1. 基本数据类型,
  • 数值型
    整型、浮点型
  • 非数值型
    字符型、布尔型
  1. 引用数据类型,接口,类,数组
  1. 不要过度依赖于注释。要写易懂的代码
  2. &符号没有短路作用,会报空指针。双&&符号会产生短路运算,不会报空指针。即双&&表达式前半部分为false时,后面的表达式不再计算。
  3. 换行符,续行符。空语句。
  4. if循环只支持布尔判别式
  5. else if执行效率高于if语句执行效率。
  6. switch语句中,括号内key的数据类型是整型能自动转换为整型的数据类型。
  7. 漏泄break语句,跑穿问题。
  8. switch语句可以解决多选多问题,即break不能去掉。
  9. while循环的可读性高于do while循环,即while循环更常见。
  10. for循环常用于定长循环。
  11. while用于标志循环。
  12. break跳出离他最近的括号外,continue跳出离他最近的括号内。
  13. return也可以跳出循环。
  14. 函数是一个有特定输入输出可以重复利用的代码段。
  15. 函数的七个要素,权限修饰符,static/final/abstract,返回类型,方法名称,形参列表,throws异常列表,方法体。
  16. 函数的返回类型,方法名称,形参列表不可缺。
  17. 一个方法尽可能实现单一功能。
  18. 递归常用于树形结构遍历
  19. 队列用于数据缓冲
  20. 数组是有同质化有序化特征的集合。
  21. 数组的初始化有静态初始化{},在编译过程中数组的大小已经确定。
  22. 数组的动态初始化。new 数据类型 [length]
  23. 数组初始化的过程就是分配内存空间的过程。
  24. 非动态数组语言长度固定。
  25. 面向对象编程有封装,继承,多态,定义类,创建对象的特性。
  26. 内部类分为static内部类、成员内部类、局部内部类。
  27. 包的作用:防止类名重复。
  28. 参数越少,构造方法优先级越高。
  29. 接口时类的一种特殊形式。
  30. static代码块在类载入虚拟机的时候执行一次。
  • 首次创建对象
  • 访问static成员
  • 载入子类会引起父类的加载
  1. 类不加public同包可见,加public修饰符,所有的类都可见。
  2. 封装的优点有,安全性高可维护性高
  3. 继承的本质是扩展。在原有的父类基础上扩展。
  4. 继承就是把子类的共有属性抽象到父类。
  5. 继承的目的就是为了白盒复用。
  6. 白盒复用破坏了继承的安全性。
  7. 继承并不多见,是由于Java继承是单继承,笨拙,只能子类继承父类。
  8. 树形结构,每个节点都有0个或1个前驱,有0个或多个后继,这种结构就叫树形结构。
  9. 多态,同名方法有不同的功能。
  10. 方法重载:两同三不同,同名,同一个类,参数个数,类型,顺序不同。参数名称不同不会构成重载,仅是返回类型不同,不会构成重载。
  11. 子类中方法不能和父类中的同名方法重载,但是可以和子类继承下来的父类同名方法重载
  12. 方法重载就是静态多态,在编译过程中实现多态。
  13. 方法重写,两同两不同。两同,同名,同参方法,一不同,继承链上的不同类。两小一大,父类对象可以被子类对象替换,异常列表可以变小。权限修饰符可以变大。
  14. 能用父类的地方一定能被子类对象替换。
  15. this关键字,在本类实例方法,构造方法,表示当前对象。
  16. This() 只能在构造方法首行使用,调用本类的其他构造。
  17. final类不能被继承。
  18. final变量值不可改变。
  19. final方法不能被重写。
  20. 抽象类不能被实例化。
  21. 抽象方法,没有方法体。
  22. 抽象类等着被继承,是is关系。接口是have关系,是有的关系。
  23. 抽象类和接口的成员不同。
  24. 接口可以多继承,类只能单继承。
  25. 类名一般是两个单词,名词在前,动词在后。
  26. 类名首字母大写,最常用的变量名就是类名首字母小写。
  27. 面向接口编程
  28. 添加删除时,链表的性能优于数组。
  29. 查询数据时,数组的性能优于链表。
  30. 将要输出的界面信息定义为一个字符串,操作数少。
  31. 柿子捡软的捏,任务挑容易的先完成。
  32. equals方法使用时,可将输入的值放在后面,避免空指针异常。
  33. 布尔类型默认假出口为false
  34. split表达式,其实就是一个正则表达式。* ^ | 等符号在正则表达式中属于一种有特殊含义的字符,如果使用此种字符作为分隔符,必须使用转义符即\\加以转义。

如果使用多个分隔符则需要借助 | 符号,如二所示,但需要转义符的仍然要加上分隔符进行处理

  1. 字符串处理类,数字处理类,日期类,集合,文件处理类。
  2. toString就是对自身的描述。
  3. static不加,所有的对象都有自己的属性。
  4. String值不可改变。
  5. String Buffer/StringBiuder可以改变内容。
  6. JDK5之后执行自动装箱。int可以自动转化为integer
  7. 向上取整即数轴上向右取整。
  8. 自动装箱: 就是将基本数据类型自动转换成对应的包装类。
  9. 自动拆箱:就是将包装类自动转换成对应的基本数据类型。
  10. 自动装箱都是通过包装类的valueOf()方法来实现的.自动拆箱都是通过包装类对象的xxxValue()来实现的。
  11. 集合中存储对象,不能存储基本数据类型。
  12. 把基本数据类型放入集合类中的时候,会进行自动装箱。
  13. 包装类与基本数据类型进行比较运算,是先将包装类进行拆箱成基本数据类型,然后进行比较的。
  14. 两个包装类型之间的运算,会被自动拆箱成基本类型进行。
  15. toString()方法在Object类中定义,其返回值是String类型,返回类名和他的引用地址。
  16. 任何类中,都可以直接使用Object类中定义的方法。
  17. String Buffer/StringBiuder
  • 1)首先String、StringBuffer、StringBuilder在JDK中都被定义为final类,这意味着他们不可以被继承。
  • 2)String最常见,与StringBuffer相比,String的性能较差,因为对String类型进行改变的时候都会重新生成一个新的String对象,这在字符串拼接操作时很明显,因此内容经常改变的字符串不应该使用String,如果不考虑多线程,则应使用StringBuilder。
  • 3)StringBuffer生成一个对象后,在进行字符串拼接操作时,调用append方法即可,不会产生新的对象,仅对对象本身进行操作,性能比String要高。另外StringBuffer是线程安全的,因此适合在多线程中使用,也正因为如此,速度跟StringBuilder相比会比较慢。
  • 4)StringBuilder的使用方法跟StringBuffer类似,但其是非线程安全的,因此一般常用于单线程,效率比StringBuffer高。
    综上所述,选择哪个,需要从内存性能、线程安全、执行效率等多方面考虑,从上面的几条对比中可以得出答案。

三、JCF(Java Collection Framework),Java容器框架

(一)Collection和Collection Framework

  1. 容器:能够存放数据的空间结构
  • 数组/多维数组,只能线性存放
  • 列表/散列集/树/……
  1. 容器框架:为表示和操作容器二规定的一种标准体系结构
  • 对外的接口:容器中能存放的抽象数据类型
  • 接口的实现:可复用的数据结构
  • 算法:对数据的查找和排序

容器框架的优点:提高数据存取效率,避免程序员重复劳动

(二)接口

  1. JCF的集合接口是Collection
  • add增加
  • contains包含
  • remove删除
  • size数据元素个数
  • iterator迭代器
  1. JCF的迭代器接口Iterator
  • hasNext判断是否有下一个元素
  • next获取下一个元素
  • remove删除某一个元素

(三)主要类

  1. JCF主要的数据结构实现类
  • 列表(List,ArrayList,LinkedList)
  • 集合(Set,HashSet,TreeSet,LinkedHashSet)
  • 映射(Map,HashMap,TreeMap,LinkedHashMap)
  1. JCF主要的算法类
  • Arrays:对数组进行查找和排序等操作
  • Collections:对Collection及其子类进行排序和查找操作。

四、List常用API

java.util.List接口中一些常用的API。

方法返回值类型方法说明
add(E e)boolean将指定的元素追加到此列表的末尾(可选操作)
add(int index,E element)viod将致电给的元素插入此列表的指定位置
clear()void删除列表中的所有元素
contains(Object o)boolean如果此列表中包含指定的元素,返回true,否则返回false
get(int index)E返回此列表中指定位置的元素
isEmpty()boolean如果列表不包含元素,则返回true,否则返回false
indexOf(Object o)int返回此列表中指定元素第一次出现的索引,如果列表不包含元素,则返回-1
lastIndexOf(Object o)int返回此列表中指定元素最后一次出现的索引,如果此列表不包含元素,则返回-1
remove(index)E删除该列表中指定位置的元素,同时返回该元素
remove(Object o)boolean从列表中删除指定元素的第一个出现
size()int返回此列表中的元素数
toArray()Objecyt[]返回包含此列表中所有元素的数组
<think>嗯,用户有C语言基础,现在想入门Java。首先,我需要确定用户对C的掌握程度,但可能用户没有详细说明,所以得假设他们熟悉基本语法、控制结构、函数和指针等概念。接下来,应该比较Java和C的异同,帮助用户迁移知识,同时注意Java特有的概念,比如面向对象、内存管理等。 用户可能需要一个结构化的学习路径,所以分步骤介绍会比较清晰。首先安装环境,比如JDK和IDE,推荐IntelliJ或Eclipse,或者用VS Code。然后从基础语法开始,强调与C的不同之处,比如数据类型、循环结构、输入输出方法的不同。比如Java没有指针,而是使用引用,内存管理自动进行,这些都需要解释清楚。 面向对象是Java的核心,必须详细讲解类、对象、继承、多态、接口和抽象类。这部分用户可能不太熟悉,因为C是过程式的。需要举例说明如何定义类,创建对象,继承的语法,以及接口的作用。 然后,进阶部分要包括异常处理、集合框架、多线程和文件操作。这些都是Java的重要特性,和C的处理方式不同,比如Java的try-catch机制,集合框架中的List、Map等,多线程的Thread和Runnable,文件操作的NIO等。 工具和生态方面,Maven、Gradle、Spring框架都是必须提到的,特别是Spring在企业中的应用。JUnit单元测试也很重要,帮助用户写出可测试的代码。 学习资源推荐书籍和在线教程,比如《Java核心技术》、《Head First Java》,以及菜鸟教程和官方文档。这些资源适合不同学习风格的用户。 最后,练习建议,强调动手写代码的重要性,参与开源项目或小应用开发。需要提醒用户Java和C的区别,比如没有指针、自动内存管理、完全面向对象、跨平台特性等,避免他们用C的习惯来写Java代码。 总结时,要鼓励用户逐步学习,先掌握基础,再深入高级内容,多实践。确保回答结构清晰,分点明确,帮助用户顺利过渡到Java。</think>好的!以下是为有C语言基础的同学整理的Java入门指南,我将分步骤对比讲解,帮助你高效迁移知识: --- ### 一、环境搭建(与C的区别) 1. **安装JDK** - C语言需要编译器(gcc),Java需要JDK(含编译器javac和JVM) - 推荐版本:JDK 17 (LTS长期支持版) - 下载地址:[Oracle JDK](https://www.oracle.com/java/) 或 [OpenJDK](https://adoptium.net/) 2. **选择IDE** - C常用Dev-C++/VS,Java推荐: - IntelliJ IDEA(企业级首选) - Eclipse(经典开源) - VS Code + Java扩展(轻量级) --- ### 二、基础语法对比(C → Java) 1. **数据类型** - 相似:`int`, `double`, `char`, `boolean`(对应C的`bool`) - 新增:`byte`(1字节), `String`(类而非字符数组) 2. **输入输出** ```java import java.util.Scanner; // 类似C的#include<stdio.h> Scanner sc = new Scanner(System.in); int num = sc.nextInt(); // 类似scanf("%d", &num) System.out.println("输出: " + num); // 类似printf ``` 3. **控制结构** - 完全兼容:`if/else`, `for`, `while`, `switch` - 增强`for`循环: ```java int[] arr = {1,2,3}; for(int n : arr) { // 类似C++的range-based for System.out.println(n); } ``` --- ### 三、核心差异:面向对象编程(OOP) 1. **类与对象** ```java // 定义类(类似C的结构体升级版) public class Student { // 成员变量(字段) private String name; // 方法(类似C的函数,但属于类) public void setName(String name) { this.name = name; // this类似C的指针解引用 } } // 创建对象 Student stu = new Student(); // new代替malloc ``` 2. **继承与多态** ```java class Animal { public void sound() { System.out.println("~"); } } class Dog extends Animal { // 类似C的结构体嵌套 @Override public void sound() { // 重写方法 System.out.println("汪汪!"); } } ``` --- ### 四、内存管理差异 1. **无显式指针** - Java用"引用"代替指针(更安全) - 示例对比: ```c // C int *p = (int*)malloc(sizeof(int)); *p = 10; free(p); ``` ```java // Java Integer num = new Integer(10); // 自动内存回收 ``` 2. **垃圾回收(GC)** - JVM自动回收无用对象(无需手动free) --- ### 五、进阶学习路线 1. **必学特性** - 异常处理(`try-catch-finally`) - 集合框架(`ArrayList`, `HashMap`) - 多线程(`Thread`类 vs `Runnable`接口) - 文件IO(`java.nio`包) 2. **工具链** - 构建工具:Maven/Gradle(类似C的Makefile) - 单元测试:JUnit(类似C的Unity测试框架) 3. **推荐项目实践** - 控制台计算器 → 图形界面计算器(Swing/JavaFX) - 简单聊天程序(Socket编程) - 学生管理系统(JDBC+MySQL) --- ### 六、学习资源推荐 1. **书籍** - 《Java核心技术 卷I》(适合快速上手) - 《Effective Java》(最佳实践指南) 2. **在线教程** - [菜鸟教程-Java](https://www.runoob.com/java/java-tutorial.html) - [Oracle官方教程](https://docs.oracle.com/javase/tutorial/) --- ### 七、关键注意事项 1. **与C的主要区别** | 特性 | C | Java | |------------|--------------------|------------------------| | 内存管理 | 手动(malloc/free) | 自动(GC) | | 指针 | 支持 | 隐藏指针(仅引用) | | 多继承 | 不支持 | 通过接口实现 | | 编译方式 | 编译为机器码 | 编译为字节码,JVM执行 | 2. **常见陷阱** - 用`==`比较字符串(应使用`equals()`) - 忘记处理异常(编译时强制检查) 通过以上对比学习,你可以利用C的编程基础快速掌握Java核心概念,建议先完成10个以上小项目实践来巩固知识!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值