9Java基础总结
1.psvm定义的意义
public:保证了方法的访问权限
static:保证在类未被实例化的时候就能调用(加载的时机)
void:不需要返回值
main:约定俗成的名字
String[] args:提供控制台传入的参数
2.代码块
代码块分为构造代码块和静态(类)代码块。
构造代码块随着对象的创建而执行,在每次实例化对象时执行,且加载时机优先于构造函数。可以在构造代码块中初始化成员变量和常量。(常量不赋初值会报错,JVM不会给他赋初值,但是可以在构造代码块中赋初值。)常量的声明可以放在构造代码块的后面。


静态代码块随类加载而加载,顺序上静态代码块优于构造代码块,优于构造函数。
在类方法/静态代码块中不能使用this,因为static先加载,不可能有对象存在,所以也不可能有对象调用方法。静态代码块中可以初始化静态变量和静态常量。常量的初始化可以放在静态构造块下面。


顺序练习:
在没有构造函数的情况下,静态变量是按照语句顺序执行赋值的。
在有构造函数的情况下,访问对象的静态变量,结果一定是构造函数中传入的值。因为构造函数的顺序在最后。
3.常用API
Math.random():返回【0.0,1.0)之间的浮点数。
System.currentTimeMillis():返回当前时间(距1970.01.01 0点的毫秒数)。经常用来计算一个方法的执行时间。
System.arraycopy(Object[] src,int srcPos,Object[] dest,int destPos,int length):从第一个数组的起始位置复制到第二个数组的起始位置,一共复制给定长度个元素。
Date date = new Date(); :返回当前时间的Date()对象。
date.getTime():返回毫秒数
SimpleDateFormat formatter = new SimpleDateFormat(格式);:创建一个格式器。
formatter.format(date);:格式化Date对象,返回一个格式化的字符串。
formatter.parse(dateString); :解析字符串,返回一个符合格式的Date。如果大于等于格式,就不会报错。如果小于格式,就会报ParseException。
Calendar.getInstance() :返回一个Calendar对象。
calendar.get(字段名);:返回日历对象对应的字段值。字段名是Calandar类中定义的常量,注意Calandar.MONTH返回的是0-11月份,Calandar.HOUR_OF_DAY返回的是24小时制。
BigDecimal():构造函数的参数可以是int,字符串,浮点数。BigDecimal可以对超过16位有效位的数进行精确运算。但是保存浮点数时还是非精确的,所以建议用字符串保存。
bigDecimal.加减乘除();:devide()如果除以0会报ArithmeticException。
4.包装类(八种基本数据类型的包装类)
常用方法:
- 构造函数(已弃用)
- 基本类型Value() :返回基本类型
- 两个数的最大值/最小值
- parse基本类型:将字符串解析为基本类型,常用方法,如果含有不符合的符号会报NumberFormatException。
- toString():
- valueOf(基本类型/字符串):返回包装类型,和parse基本类型方法都是可以将字符串转换为基本类型的方法。
5.自动装箱和自动拆箱(java5之后出现)
自动装箱是指基本类型可以直接赋值为封装类型。JVM自动完成类型转换。自动装箱的过程实际是底层调用量valueOf()这个方法。
自动拆箱指封装类型可以直接赋值为基本类型。
6.包装类的缓存问题

以Integer类为例,valueOf()方法返回的是包装类,而底层实现采用了缓存机制。如果这个简单类型在[-128,127]之间,就会使用IntegerCache的cache数组中的对象进行返回(缓存数组,在[0,255]的下标中存放了每个对象)。
而Float和Double类的valueOf()方法没有使用缓存,直接new 了对象。 Integer s = new Integer(9) ;//分配堆内存,地址。Java不推荐,推荐使用自动装箱的方法。
Integer t = new Integer(9) ;//分配堆内存,地址。
Long u = new Long(9) ;//分配堆内存,地址
// System.out.println(s==u);//Operator '==' cannot be applied to 'java.lang.Integer', 'java.lang.Long'
System.out.println(s==t);//false,两个不同地址的比较。
System.out.println(s.equals(t));//true
System.out.println(s.equals(9));//true
System.out.println(s.equals(new Integer(9)));
Integer a = 9;//相等于Integer a = Integer.valueOf(9);
Integer b = 9;
System.out.println(a==b);//true,两个都是cache数组的下标地址
a= 128;
b= 128;
System.out.println(a==b);//false,超过了缓存范围,new的新对象
Character c = 128;
Character d = 128;
System.out.println(c==d);//false,超过缓存范围
Character e = -1;//注意char类的范围是0~2^16-1。
7.异常
异常是程序执行过程中出现的不正常情况。(开发中的语法错误和逻辑错误不属于异常。)
异常分为:
- Error:JVM无法处理的严重问题。如内存错误,资源耗尽。
- Exception:因为编程错误和偶然原因出现的一般性问题。一般使用try-catch块或throw、throws关键字处理。如果不处理异常,JVM会在控制台打印堆栈信息,并且程序会自动终止。
Exception分为:运行时异常和检查时异常。(只有RunTimeException子类,没有CheckedException子类)。
运行时异常是编译器不要求强制处理的异常,通常指编程错误。有常见的ArithmeticException、ClassCastException(not instanceof时)、IndexOutOfBoundsException、NullPointerException。
编译器异常是编译器要求处理的异常,即一般性异常,如果不处理则程序不允许运行。

8.try-catch-finally 和return顺序:
public class test {
public int add(int a,int b) {
try {
return a+b;
}catch(Exception e){
System.out.println("catch语句块");
}finally {
System.out.println("finally语句块");
}
return 0;
}
public static void main(String[] args) {
test t=new test();
System.out.println("和是"+t.add(9, 34));//finally语句块,和是43
}
}
当try块中有return语句,又有finally块时,会先把try块中的return 返回值保存到一个栈中。当finally块执行完时,再调出这个栈的内容返回。
public class test {
public int add(int a,int b) {
try {
return a+b;
}catch(Exception e){
System.out.println("catch语句块");
}finally {
System.out.println("finally语句块");
a=1;
}
return 0;
}
public static void main(String[] args) {
test t=new test();
System.out.println("和是"+t.add(9, 34));//finally语句块 和是43
}
}
在finally块中又对a进行赋值,但是并没有影响到栈中的内容,只改变了a的值,返回值没有变。
如果catch块中有return语句,finally块中没有return语句,情况也是类似的。
如果finally中也有return语句,最终会返回finally的返回语句。
try-catch块中,可以有多个catch块,但是只能进入一个catch块,并列catch块可以是同级类型,如果有父类异常应该放在最后。catch块捕捉的是异常对象。
9.throws/throw
throws抛出的是异常的类型,抛出异常可以是多个类型。
throws和throw的区别:
- 编写的位置:throw在方法体中,throws在方法声明上。
- 抛出的类型:throw抛出一个对象,throws抛出的是异常的类型。
- 抛出的个数:throw抛出一个对象,throws可以抛出多个类型。

10.自定义异常
自定义异常需要继承Exception类,在有异常的方法体中写throw 异常对象语句,并在这个方法的声明上标注throws 异常类型。(标注的地方是在参数列表后面)。
自定义异常需要重写无参构造和有参构造(String 异常信息)。
9Java基础总结的更多相关文章
- Java基础知识了解
第一章 开发前言 一.java语言概述 Java是当下最流行的一种编程语言,至今有20年历史了.Java语言之父是James Gosling. Java是Sun公司(Stanford Universi ...
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- node-webkit 环境搭建与基础demo
首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Golang, 以17个简短代码片段,切底弄懂 channel 基础
(原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- HTTPS 互联网世界的安全基础
近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- .NetCore MVC中的路由(1)路由配置基础
.NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...
随机推荐
- PTA4-6题目集总结与归纳
前言: 继上篇blog所写的几种日期的求法,这次是把那几种聚合起来,即日期类的聚合设计.除下这类,一种是图形继承设计的3种变化,还有一种是3次对正则表达式的应用.当然,作为一个菜鸟,还是无法写成大佬的 ...
- sql server数据库性能优化之2-避免使用CTE公用表达式的递归【by zhang502219048】
数据库优化中的一个实例,记录一下: 1. 原来用了CTE公用表达式的递归,reads高达约40万,看查询执行计划,使用了Nested Loops: 2. 优化去掉递归,改用其它方式实现,reads降低 ...
- 555定时器(1)单稳态触发器电路及Multisim实例仿真
555定时器(Timer)因内部有3个5K欧姆分压电阻而得名,是一种多用途的模数混合集成电路,它能方便地组成施密特触发器.单稳态触发器与多谐振荡器,而且成本低,性能可靠,在各种领域获得了广泛的应用. ...
- ANDROID开发之OOM:一张图片(BitMap)占用内存的计算 图片内存优化
Android中一张图片(BitMap)占用的内存主要和以下几个因数有关:图片长度,图片宽度,单位像素占用的字节数. 一张图片(BitMap)占用的内存=图片长度*图片宽度*单位像素占用的字节数 注: ...
- 上手 Raspberry Pi Pico
什么是 PICO Raspberry Pi Pico 是树莓派推出的一块基于 Arm Cortex-M0+ 内核的 MCU 的开发板,使用的 MCU 是树莓派自己研发的 Arm Cortex-M0+ ...
- excel函数提取身份证出生日期,分离日期时间的日期和时间
1.提取身份证出生日期 =1*TEXT(MID(H13,7,8),"0-00-00")用MID函数提取表示日期的位数,再用text函数转换为格式1998-6-21格式的文本,再通过 ...
- excel计数函数COUNTIF、COUNTIFS
1.单条件计数:COUNTIF(条件区域,指定条件) =COUNTIF($H$2:$H$8,L2)求H2:H8中值等于L2的行记录数,这里求的是游泳项目总共有多少个人参加 2.多条件计数:COUNTI ...
- 友华新光猫PT924G破解telnet之路
最近去找电信要了个新的千兆光猫(电信宽带300兆配100兆光猫真鸡贼),背后一看不是华为了,是友华PT924G,在http://192.168.1.1:8080/里看到了熟悉的电信界面 用teleco ...
- 第二章 - Java与协程
Java与协程 内核线程的局限 通过一个具体场景来解释目前Java线程面临的困境.今天对Web应用的服务要求,不论是在请求数量上还是在复杂度上,与十多年前相比已不可同日而语,这一方面是源于业务量的增长 ...
- Hibernate框架(三)框架中的关系映射
在设计数据库时我们会考虑,表与表之间的关系,例如我们前边经常提到的一对一,一对多,多对多关系,在数据库中我们通过外键,第三张表等来实现这些关系.而Hibernate时间实体类和数据库中的表进行的映射, ...