一、内存管理

java里的声明分引用与基本数据类型。

数组:

java里new一个对象数组为  person[] A; A = new person[4];  person[0] = new person();

第一句声明了1个A数组引用变量,指向为null。第二句让A指向一个长度为4的数组内存,数组元素类型是person引用类型,值为null,此时并没有分配内存。所以才有第三句,第三句是真正意义上的分配内存。

java里new多维数组为 int[][] a; a = new int[4][];  a[0] = new int[4];

第一句声明了1个二维数组引用变量,指向为null。第二句声明让a指向一个长度为4的数组内存,数组元素是一维数组引用类型,值为null,此时并没有分配内存。第三句分配了一个长度为4的一维数组,因为数组元素是int,所以变量自动填补为0。(如果把int改为person,则到这里还不够,还需要继续new,为每个person分配内存)。

实例变量与类变量:

被static修饰的是类变量。每个类中有一份类变量,类变量一开始就有内存。所以static方法可以访问static变量,但访问普通变量必须先new,因为普通变量没有分配内存。

对于类变量,系统首先为其分配内存空间,并将基本数据类型赋值为0或null;之后再根据初始化顺序依次初始化。

父子实例的内存控制:方法会覆盖,变量不不会被覆盖。这里就牵扯到多态问题了。一个父类引用指向一个子类时,当用该引用调用方法 引用.方法(),调用的是实际类型的方法(子类方法);当用该引用调用变量时 引用.变量,调用的是声明类型的变量(父类变量)。

final修饰符:

很多情况下,final修饰的变量会被当做宏替换处理。子类若能访问到父类的final方法,则不能对final方法进行重写。

final的用途:

  • 锁定方法,防止被继承类修改。
  • 写出可以在运行时被确定的代码,从而可以内嵌调用。

内部类:成员内部类、静态内部(嵌套)类、方法内部类、匿名内部类 。

成员内部类:

class Outer {
class Inner{}
}
编译上述代码会产生两个文件:Outer.class和Outer$Inner.class。
 
方法内部类:
把类放在方法中。

(1)、方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。
(2)、方法内部类对象不能使用该内部类所在方法的非final局部变量
class Outer {
public void doSomething(){
final int a =10;
class Inner{
public void seeOuter(){
System.out.println(a);
}
}
Inner in = new Inner();
in.seeOuter();
}
public static void main(String[] args) {
Outer out = new Outer();
out.doSomething();
}
}
匿名内部类:
当程序中使用匿名内部类时,在定义匿名内部类的地方往往直接创建该类的一个对象。匿名内部类的声明格式如下:
new ParentName(){
...// 内部类的定义
}
很方便,直接在new的时候实现一个接口或一个类。
静态内部类:
静态内部类中可以定义静态或者非静态的成员。
静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它。静态嵌套类仅能访问外部类的静态成员和方法。
class Outer{
static class Inner{}
}
class Test {
public static void main(String[] args){
Outer.Inner n = new Outer.Inner();
}
}
在静态方法中定义的内部类也是StaticNested Class,这时候不能在类前面加static关键字,静态方法中的StaticNested Class与普通方法中的内部类的应用方式很相似,它除了可以直接访问外部类中的static的成员变量,还可以访问静态方法中的局部变量,但是,该局部变量前必须加final修饰符。
 
 
@Override的用法:
编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。
 
二、异常
JAVA里的异常机制是,程序执行过程中遇到异常,则该方法向上级方法传递异常,直到main方法。
异常分为捕获异常与未捕获异常。所谓捕获异常即必须处理的异常,若某代码段可能出现某捕获异常必须处理,未出现必须不处理。不能在一个正常的代码段后catch一个捕获异常。否则无法通过编译。(至于哪些是捕获异常,编译的时候编译器会提醒你,否则会无法通过编译)
try..catch..finally,catch与finally不能都省略。finally一般情况下在try和catch执行后都会得到执行(即使在try或catch中有return语句也会得到执行)。
关于抛出异常:声明的时候是throws ...,代码里是throw ...,可向上级方法传递异常。刚才说了,某代码段可能出现某捕获异常则必须处理,可以以try..catch..finally的方式处理(自己处理),也可以直接在函数声明处一以void f() throws ...{}处理(上级处理)。
throws关键字的最大好处是:在方法中不处理任何的异常,而交给被调用处处理。
声明的时候有捕获异常,则必须用以上用以上两种方法处理,throws或try...catch...finally...
声明的时候throws xx,代码里可以没有throw xx,遇到xx异常,则隐式抛出异常,有throw xx,则显示抛出异常。
关于异常的博客资料:http://taohui.iteye.com/blog/1222431

java的重修之路的更多相关文章

  1. 【转】java架构师之路:JAVA程序员必看的15本书的电子版下载地址

    作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...

  2. paip.java 架构师之路以及java高级技术

    paip.java 架构师之路以及java高级技术 1.    Annotation 设计模式... 概念满天飞.ORM,IOC,AOP. Validator lambda4j memcache. 对 ...

  3. Java架构师之路:JAVA程序员必看的15本书

    作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...

  4. Java工程师修炼之路(校招总结)

    Java工程师修炼之路(校招总结) 前言 在下本是跨专业渣考研的985渣硕一枚,经历研究生两年的学习积累,有幸于2019秋季招聘中拿到几个公司的研发岗offer,包括百度,阿里,腾讯,今日头条,网易, ...

  5. Java工程师修炼之路(从小白到BAT的两年学习历程)

    ​ 作者:陆小凤 文章首发于:微信公众号[程序员江湖] 前言 在下本是跨专业渣考研的985渣硕一枚,经历研究生两年的学习积累,有幸于2019秋季招聘中拿到几个公司的研发岗offer,包括百度,阿里,腾 ...

  6. java架构师之路:推荐的15本书

    作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...

  7. 入坑Java的自学之路

    # 入坑Java的自学之路 ## 基础知识 - 编程语言:Java python c- 基本算法- 基本网络知识 tcp/ip http/https- 基本的设计模式 ------ ## 工具方面 - ...

  8. Java技能提升之路

    James收集Java技能提升方面的资料,分为:基础篇.提高篇.高级篇… 给出“入口”,自我提升 1. Java工程师成神之路:http://www.hollischuang.com/archives ...

  9. Java成神之路[转]

    阿里大牛珍藏架构资料,点击链接免费获取 针对本文,博主最近在写<成神之路系列文章> ,分章分节介绍所有知识点.欢迎关注. 主要版本 更新时间 备注 v1.0 2015-08-01 首次发布 ...

随机推荐

  1. Swoole + zphp 改造为专门用来开发接口的框架

    The other problem I had with Laravel Task Scheduling was that i really only wanted something to hand ...

  2. 通达OA 同步中控考勤机 增强版

    如果你用的是中控考勤机且考勤机能联网,那恭喜有福了! 最近发现考勤机提供web方式查询,经过调试可以用程序直接读取考勤机数据跨过考勤机软件及其access数据库,数据同步及时性.可靠性大幅提高. 通达 ...

  3. 怎样新建Oracle数据库

    新建Oracle数据库三种方法:1.通过运行Oracle Database Configuration Assistant 创建配置或删除数据库(也可在命令行下输入dbca):2.用命令行的方式建立数 ...

  4. ArrayList集合的实现原理

    一. ArrayList概述: ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单线程环境 ...

  5. java多线程解决生产者消费者问题

    import java.util.ArrayList; import java.util.List; /** * Created by ccc on 16-4-27. */ public class ...

  6. js&jq 发送验证码倒计时

    <input  type="text"   name=''  id="btn"> //发送验证码倒计时var wait=30; function t ...

  7. Linux下缓冲区溢出攻击的原理及对策(转载)

    前言 从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用.当函数调用发生时,新的堆栈帧被压入堆栈:当函数返回时,相应的堆栈帧从堆栈中弹出.尽管堆栈帧结构的引入为在高级语言中实现 ...

  8. JAVA学习随笔-.class

    类名.class是获得这个类所对应的Class实例.从面向对象的角度上来看,类也是对象,它们是类这个类对象,听起来有些抽象,但是在java中的实现就是所有的加载进来的类在虚拟机中都是一个java.la ...

  9. Selenium WebDriver + Python 环境配置

    1.   下载必要工具及安装包 1.1.[Python开发环境] 下载并安装Python 2.7.x版本(当前支持2.x版本,不要下载最新的3.X的版本因为python3并非完全兼容python2) ...

  10. char、unsigned char、BYTE

    首先uchar就是BYTE:Typedef unsigned char BYTE: char:就是signed char,是一个字节,8个位.第8位是符号位,所以可以表示-128~127共256个符号 ...