java学习记录贴

1. 准备

  • IDE(使用开源的eclipse)
    https://www.eclipse.org/downloads/
  • 下载jdk + 配置环境变量
    (JDK是java开发工具包,这个安装好以后,就可以运行Java了)
    https://www.oracle.com/technetwork/java/javase/downloads/index.html
    ps:在安装过程中还要安装JRE,JRE是Java运行环境, 安装它,才能使Eclipse,Jbulilder等IDE工具可以正常使用。安装完jdk之后,会弹出jre的安装界面。

2. 理解

2.1

  • java:这个可执行程序其实就是JVM,运行Java程序,就是启动JVM,然后让JVM执行指定的编译后的代码;
    命令行:编译(javac xxx.java)运行(java xxx)【xxx为你命名java主类】
  • javac:这是Java的编译器,它用于把Java源码文件(.java)编译为Java字节码文件(.class);
  • jar:用于把一组.class文件打包成一个.jar文件,便于发布;
  • javadoc:用于从Java源码中自动提取注释并生成文档;
  • jdb:Java调试器,用于开发阶段的运行调试;
  • javap: 反编译,将类文件还原回方法和变量;
  • appletviwer : Java解释器, 用来解释已经转换成Bytecode的java小应用程序;

2.2 java版本

(1)Java标准版(J2SE, Java Standard Edition)
定位在个人计算机上的应用。这个版本是Java平台的核心,它提供了非常丰富的API来开发一般个人计算机上的应用程序,包括用户接口AWT及Swing,网络功能与国际化、图像处理能力以及输入输出支持等。在互联网上大放异彩的Applet也属于这个版本。
ps:是用于创建典型的桌面与工作站应用的Java平台。从配置上来说,只要安装JDK(Java Development Kit),就建立了一个J2SE开发和运行平台。
(2)Java企业版(J2EE, Java Enterprise Edition)
定位在服务器端的应用。相关技术有EJB 、JDBC、、Servlet、JSP、XML、email及transaction、Struts、Spring、Hibernate以及Ajax等等。
(3)Java微型版(J2ME, Java Micro Edition )
定位在消费性电子产品的应用上。这个版本的应用层面相当广泛,比如呼机、智能卡、手机、PDA,机顶盒。会是未来Java平台发展的重点项目。

2.3 java的特点

(1)Java是健壮的
Java的代码 具有可靠性。Java丢弃了容易引起错误的数据类型,如指针等。并且在Java编译过程中,对很多可能发生的错误进行了防范。并可进行实时异常处理。
(2)Java是安全的
Java执行多种安全机制用以保护系统不受恶意程序的破坏。
(3) Java是可移植的
Java的字节码可以直接移植到不同的操作系统上运行。
(4)Java的效率
Java的效率不如C++快,但足以满足大多数交互应用程序的要求。实时编译技术。
(5)Java是多线程的
多线程技术常用于用户图形界面和网络中。
(6)Java动态的
不需要重新编译就可以加入新类。增强了软件更新的能力。

3. get语法知识

“基本类型”和“引用类型”的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的。

3.1 基本数据类型

  • 整数类型:byte,short,int,long
    (1) byte:-128 ~ 127 (1byte = 8bit)
    (2) short: -32768 ~ 32767
    (3) int: -2147483648 ~ 2147483647
    (4) long: -9223372036854775808 ~ 9223372036854775807
  • 浮点数类型:float,double
    浮点数的运算常常会存在误差,应特别注意,特别是在进行比较两个浮点数的时候,最好将差的绝对值与一个很小的数比较。
    ps:浮点数0.1在计算机中就无法精确表示,因为十进制的0.1换算成二进制是一个无限循环小数。
    在这里插入图片描述
  • 字符类型:char
    char类型除了可表示标准的ASCII外,还可以表示一个Unicode字符
    \uxxx 表示一个Unicode编码的字符(通常用unicode编码的字符可以验证汉字)
    ps:java采用utf-16
    字符集(https://blog.csdn.net/qq_33414271/article/details/78519159 )
    理论上第三个应该是ok的,这里先填个坑。
    在这里插入图片描述
  • 布尔类型:boolean

3.2 引用数据类型(待扩充)


  • (1)包装类:将基本数值类型处理为对象。
    (由于效率的原因Java中的基本数据类型不作为对象使用。
    然而,许多Java中的方法需要对象作为参数。
    (例如,集合类ArrayList x = new ArrayList(); x.add(17); )
    Java提供了一个方法,可将基本数据类型并入对象或包装成对象。)
    在这里插入图片描述
    Boolean
    Character
    Short
    Byte
    Integer
    1)字符串转数值Integer.parseInt()/Integer.valueOf()
    数值转字符串Integer.toString()/String.valueOf()/String.format("%d",i)
    在这里插入图片描述
    2)BigInteger的应用
    https://blog.csdn.net/qq_42677329/article/details/89395088
    Long
    Double
    ps:

    • 每一个包装类覆盖了Object类中定义的toString, equals, 和 hashCode方法。
    • 因为所有的数值包装类实现了 Comparable 接口, 所以这些类中都实现了compareTo方法。
    • 等于‘==’和‘!=’运算符两端作用于包装类时,是引用比较。一律使用equals进行值比较。
    • 包装类没有无参构造方法
      所有包装类对象一旦创建,其内部的值就不可以再改变了。
    • JDK 允许基本数据类型和包装类之间的自动转换。

    (2)String类
    区别于类StringBuffer和StringBuilder :可变字符串类,创建该类的对象后,可以随意修改,变更字符串的内容。在多线程共享操作中使用StringBuffer,否则使用StringBuilder,效率更高。
    在这里插入图片描述
    在这里插入图片描述
    字符串转数组

    正则的使用 :导入java.util.regex.Matcher;java.util.regex.Pattern
    (https://www.runoob.com/java/java-regular-expressions.html )
    get:
    .代表任何字符
    代表0个或多个
    \d代表数字:[0-9],使用时应该是[\\d]
    [\d]
    [02468]
    构造方法在这里插入图片描述
    在这里插入图片描述
    ps:

    • String继承Object,实现Comparable接口。它重写了父类的某些方法,包括equals()方法,hashCode(),toString()等方法。

    • 实现了Comparable接口的compareTo()方法

    • 对String而言,==用来比较引用是否相等,equals用来比较内容是否相等。

(3)Math类

	Math.PI		常量π
	Math.random()	获得0-1范围内的一个随机数
	Math.sin(x)
	Math.pow(a,b)	返回a的b次方
	Math.sqrt(x)
	Math.max(a,b)

ps:当利用随机数时候若要用int类型的强制转换时,注意是(int)(Math.random()*10),若写成(int) Math.random()10,后者是先强制转换再10,故任何时候这个结果都是0.
(4)Date类

  • 比较日期
    1.getTime() 方法获取两个日期
    2.before(),after() 和 equals()
    3.compareTo() 方法
    日期格式
    Calender类
    在这里插入图片描述
  • 接口
  • 数组
    (1)数组的复制
    用循环语句逐个复制数组的元素
    使用System类中的静态方法arraycopy
    使用clone方法复制数组
    在这里插入图片描述
    (2)其他操作 import java.util.Arrays;
    排序:sort()
    填充:fill()
    复制:copyof ()
    比较:equals ()
    查找:binarySearch ()
  • 枚举
  • 注解

4. 方法的访问修饰符

  • public :不仅允许跨类访问,而且允许跨包访问。

  • default :即不加任何访问修饰符(称为”默认访问方式”),允许在同一个包中访问。

  • protect : 允许在任何子类中或在同一个包中访问,相当于protect 或 default。

  • private : 只允许本类成员访问。

  • static :用static修饰的方法称为静态方法,该方法是属于类的。使用静态方法可以在不创建类对象的情况下,直接使用类名调用。注意,静态方法中不能直接使用非静态成员。

  • final :使用该关键字定义的方法被称为最终方法,它不能在子类重写(override,动态绑定),但能重载(overload,静态绑定)。

ps :
1)这些访问修饰符同样可用来修饰成员变量。
2)重载:相同函数名但参数个数、参数类型不完全相同。

5.封装、继承、多态

1)子类也可叫做特殊类、派生类,基类也可叫做一般类、超类。
2)通过一个变量访问对象的方法时(向对象发送消息),究竟访问的是哪一个类中的方法(由于变量的多态性,编译器不能确定),由该变量此时所引用的是哪一个类的对象来决定(运行时JVM确定实际类型)。(产生方法多态性)
3)继承:extends 关键字
4) super关键字指向直接父类:

  • 调用父类的构造方法 :super();或super(参数)
  • 调用父类的方法 :super.方法名(参数)

6.抽象类

当一个类中包含了抽象的方法(关键字abstract),此类就被认为是一个抽象类,此时该类就不能被实例化了。
将抽象类进行的更加彻底,即是接口(关键字interface),接口里不能包含普通方法,接口里所有的方法都是抽象方法。
接口的主要用途就是被实现类实现。一个类可以实现一个或是多个接口,继承使用extends关键字,实现则使用implements关键字。
在这里插入图片描述
匿名类

7.泛型generic

泛型类、泛型接口、泛型方法。
好处:
①在编译的时候检查类型安全
②并且所有的强制转换都是自动和隐式的
③提高代码的重用率。

7.1泛型类通常是各种容器类set、map、List

  • 泛型的类型参数只能是类类型
    在这里插入图片描述
  • 另:

在这里插入图片描述

在这里插入图片描述

  • 传入泛型实参和未传入泛型实参时的写法差异
  • 泛型方法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 用通配符?实现泛型数组
    在这里插入图片描述

8.异常类

异常类继承体系
在这里插入图片描述

  • Error:一般是指虚拟机相关的问题,如系统崩溃、虚拟机出错误、动态链接失败等。这种错误无法恢复或不可能捕获,将导致应用程序中断。

  • Exception:由程序和外部环境引起的错误,这些错误能通过程序捕获和处理。

9. IO

在这里插入图片描述

在这里插入图片描述

10、线程

详细借鉴他人

get小知识(持续更)

  • NaN表示Not a Number
  • Infinity表示无穷大
  • -Infinity表示负无穷大
  • Java没有给方法中的局部变量赋予默认值
  • java支持内部类
  • 获取字符串的长度用length();而获取集合的长度用size();获取数组的长度用length;
  • 悬空else时,else总是与最靠近的if 相匹配
  • 一旦一个数组被创建,其长度就确定了,不能被修改
  • Java类只能有一个直接的父类。但实际上, Java类可以有无限多个间接父类。
  • this是消息[该方法]的接收对象[目标对象],而super则是this对象的父对象。
  • String对象本质上就是一个字符数组(参见源码)
  • final修饰的类不能被继承,final修饰的方法不能被重写
  • 接口中声明的常量默认为public static final,接口里的方法总是使用public abstract修饰
  • 进行异常捕获的时候,一定要记住先捕获小的异常,再捕获大的异常
  • Thread.sleep(1000*3); // 休眠3秒
  • Java 的内存回收可以由 JVM 来自动完成。如果你手动使用finalize() 方法
  • 有时候你希望运行一个程序时候再传递给它消息。这要靠传递命令行参数给main()函数实现。
发布了33 篇原创文章 · 获赞 2 · 访问量 6952

猜你喜欢

转载自blog.csdn.net/qq_42677329/article/details/90762206