Java基础知识

Java基础知识
一、Java语言的特点
1、跨平台
Java在诞生之时,就提出一个伟大的口号“一次编写随处运行”。其实个人感觉这是计算机语言随着硬件发展的一个必然产物,Java只不过是首先提出了这个理念。回顾历史有一种特别的感觉,但是
推动历史实在太难。Java在操作系统层面之上增加了虚拟机的概念,虚拟机可以针对不同的操作系统平台定制不同版本,而虚拟机的实现则是基于底层语言。例如C语言可以直接作用于硬件,与
是什么操作系统没有太大关系。Java虚拟机将源程序解释为字节码,而字节码可以运行在不同的虚拟机上,虚拟机从概念上可以跨平台,因此就可以推导出Java语言可以跨平台。
2、反射
程序在运行期可以获取对象自己的类型信息,明确知道自身的结构,调用对象上的函数。反射也叫自省,知道自己的存在对整个程序的影响。它的入口类是Class,每一个类型通过getClass()函数
得到这个类型的对象,通过这个对象可以获取类型上的函数、属性等信息。与反射有关的类如下:Modifier,Field,Method,Constructor。Modifier标记方法或者属性的访问控制类别常量,
Field属性对象,Method的是方法对象,Constructor是类的构造函数对象。Class对象提供newInstance()函数调用类的无参数的构造函数来创建类的实例,如果要调用有参数的构造函数则必须
通过Class对象返回类的Constructor对象,通过该对象调用。数组是一种特殊的类型,不能通过newInstance()函数创建,但是Java语言提供了Array类来创建数组。要获取函数的调用记录,
可以使用代理的方式进行,代理类Proxy
函数属性的的访问检查,Field和Method继承AccessibleObject.
java.lang.reflect.AccessibleObject.setAccessible(boolean flag)值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施
Java 语言访问检查。
3、面向对象
面向对象首先要明确几个术语:封装、继承、多态、重载、类、对象、接口
封装:封装是一个概念,它是把方法、属性、事件集中到一个的类中,对使用者来说操作是透明的。
继承:借用自然界生物链的概念,每一个对象都不是独立存在的。在这个程序世界中都与其他对象有着某种联系,从生物角度上看这种联系称作是父子关系,子从父上获取父的特性,并且拥有自己的特性。
这种程序关系叫做继承。
多态:一个同样的函数对于不同的对象可以具有不同的实现。例如一个Add方法,它既可以执行整数的加法求和操作,也可以执行字符串的连接操作,同一个函数有不同的状态。主要是子类继承父类,
并重写父类的方法,实现了不同的操作
重载:一个类中有若干个方法名相同,方法的参数不同,这种现象叫做重载。
类: 代表自然界中的类型,它描述了一组特征,定义了一组操作。仅仅是一种描述,一种定义。
对象:是类的实例化,属性的持有者和操作的执行者。
接口:接口是一种约定,它定义了一种结构,扩展了继承的单一性。

4、集合操作
集合操作有两个接口Collection和Map,分别属于集合的两个分支,他们提供了集合操作的基础方法。其中Collection包含两个分支,一个Set另一个是List。Set中无重复元素,如果
给一个结合添加两个重复元素,第二次调用之后返回false,取元素时返回null,但是在添加元素时没有校验。这样需要在添加元素时对于待添加的元素要求程序员非常明确,不能有重复元素。
List则不考虑重复元素,可以向List中增加任意元素。Map提供Key Value映射机制,通过Key快速定位Value。Map中有一个内部接口Entry,补充了集合的概念。集合是对数组概念和操作上
的扩充,集合中增加了迭代操作,对链表、队列等数据结构进行快速遍历。还有一些抽象类,程序员可以实现定制。目前常用的集合包括HashSet、HashMap、ArrayList、Properties等
集合中取元素, 列表对象可以使用get直接取,集合对象需要获取集合的迭代对象取值。

集合操作与引用传递:
Jvm对内存的管理,对象都存储在堆中,变量表存储在方法栈中,引用类型的变量也存放在方法栈中,如果列表或者集合中存放的是对象,则实际在列表中存放的是对象的引用。如果对集合或者列表
操作,复制或者删除,则不会改变堆中对象的数量,删除操作应该是删掉列表中的应用变量,堆中的对象则会被GC回收。(只是臆测而已,没有验证!) Hibernate的负责实体对象与数据库同步。
这就要求实体对象全局只能有一份,任何操作都是对这个一份对象进行的。


5、字符串的国际化,增加字符的概念
字符串有两种形式存在,
1.字符串常量,也称为字符串字面值
2.字符串对象
字符串常量在类编译之后保存在常量池中,字符串对象则作为一个对象存在。
字符串是字符的数组,字符在Java中被定义为Unicode码,统一字符编码,Unicode码为两个字节,可以代表任意字符。字符和字符串可以相互转换,字符和byte数据组也可以相互转换。
字符串的国际化就是将本地字符转换成统一字符编码。
字符串的比较
比较方式分为值比较和引用比较,值比较是比较字符串的值是否相等,引用比较是比较引用对象的指针是否相等,即是否指向内存中的同一块区域。
String的equal方法重载了Object对象上的equal方法,Object中的equal是this==obj,而String的equal则是通过比较字符串的内容扩展了equal方法。
在String类中有个标记为native的函数intern(),通过这个函数可以实现另一种比较字符串的方法。该函数可以把调用该函数的字符以常量的形式补充在常量池中,然后可以按照常量的
比较语法==进行比较。intern()函数要比equal()函数的性能好,但是可以忽略不计。
国际化与本地化:
根据地理、人文、习惯划分,需要国际化和本地化的内容可以分为:字符串、日期、时间和历法。字符串主要通过统一编码的形式进行,日期和时间主要各个地区的显示格式不同,历法也是如此
国际化和本地化之间有区域化的概念,区域化是相同地区的一个汇总。

6、多线程
在计算机编程中,一个基本的概念就是同时对多个任务加以控制。许多程序设计问题都要求程序能够停下手头的工作,改为处理其他一些问题,然后再返回主进程。线程是进程的基本单元,
线程只是用于分配单个处理器的处理时间的一种工具。但假如操作系统本身支持多个处理器,那么每个线程都可分配给一个不同的处理器,真正进入“并行运算”状态。多线程要协调处理资源
分配,就像银行出纳员处理储户的存取款一样。例如两个窗口对同一个账户进行操作,一个存款一个取款。在早期没有计算机的时代,第一个出纳员会在该储户的文件柜 看被操作之前增加
一个特殊的标记,标记当前这个账户正在被使用,第二个出纳员必须等待直到第一个出纳员取消标记,第二个出纳员才能开始对该账户进行操作。计算机的多线程借助这个概念,称之为锁。
只有资源的锁被打开的情况下线程才能对该资源进行操作。
创建线程:Java中提供了两种方式创建线程,扩展java.lang.Thread类,实现java.lang.Runnable接口。每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。
线程调度:
1、调整线程优先级:Java线程有优先级,优先级高的线程会获得较多的运行机会。
2、线程睡眠:Thread.sleep(long millis)方法,使线程转到阻塞状态。millis参数设定睡眠的时间,以毫秒为单位。当睡眠结束后,就转为就绪(Runnable)状态。sleep()平台移植性好。
3、线程等待:Object类中的wait()方法,导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 唤醒方法。这个两个唤醒方法也是Object类中的方法,
行为等价于调用 wait(0) 一样。
4、线程让步:Thread.yield() 方法,暂停当前正在执行的线程对象,把执行机会让给相同或者更高优先级的线程。
5、线程加入:join()方法,等待其他线程终止。在当前线程中调用另一个线程的join()方法,则当前线程转入阻塞状态,直到另一个进程运行结束,当前线程再由阻塞转为就绪状态。
6、线程唤醒
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值