JavaSE复习(一)

命名规则

域名倒过来,全部小写;eg:com.sheepAdmin.www
类和接口若为一个单词首字母大写,多个单词采用驼峰
方法和变量一个单词小写,多个单词驼峰
常量

数据类型

基本类型 (四类八种)

整数

byte(1B),short(2B),int(4B),long(8B)

浮点型

float(4B)l,double(8B)f 默认

字符型

char(2B)

布尔型

boolean(无指定,理论上1b)

相关问题:

1.常量相加和变量相加区别:变量相加jvm无法判定两个变量的数值,byte运算会自动装化成int;常量相加:java有常量优化机制,直接赋值

2.byte,short,char – int – long – float – double;byte、short、char不会相互转化,其余的会提升为高的,任何数据类型与字符串相连都会产生新的字符串

 3.java采用unicode编码,unicode每个字符占两个字符,汉字也是两个

引用类型(4B)

数组
对象
接口
枚举

数组

byte,short,int,long初始化都是0
float,double初始化都是0.0
boolean初始化是false
char初始化都是'\u0000'
三种初始化方式:1.动态初始化 2.静态初始化 3.默认初始化

变量

局部变量从属于方法或语句块,必须被初始化
成员变量

定义在类里边,成员方法外面,系统自动初始化;数字:0.00

boolean:false;char“\u0000 引用类型:null

静态变量static,从属于类,初始化规则同成员变量

static注意事项

在静态方法中没有static方法静态方法随着类的加载而加载,而this随着类的;即静态比对象先存在
静态方法只能访问静态的成员变量和成员方法        非静态方法都可以访问

 表达式

自动提升

有long转long

有double转double

强制转换

运算符

算数运算符

+ - *  / % ++ --

+有三种作用,做正号,做加法,字符串连接符

赋值运算符

=,+=,-=,*=,/=,%=

不会改变其数据类型,eg:byte i=0;i+=10不报错但是i=i+10报错

比较(关系)运算符

>,>=,<,<=,==,!=

运算结果都是布尔型

逻辑运算符

 !,&&,||(都是对布尔型进行运算的)

位运算符

~,&,|,^

&(|)和&&(||)的区别:&&具有短路效果,如果左边为false不执行右边

^:一个数据对另一个数据^两次本身不会变化:三种交换数值方式:指针形式有弊端(三种数值交换方式,指针型有缺陷)

三元(条件)运算符

布尔表达式?表达式1:表达式2
移位运算符>>,<<,(以上两个都是有符号数移动,按照补码的规则移动)>>>无符号数右移

键盘的录入

1.导入包import java.util.Scanner
2.创建键盘录入对象Scanner 对象名=new Scanner(System.in);
3.通过对象获取数据数据类型 数据名=对象名.nextInt();/即相应的next方法

控制语句

顺序结构默认
选择结构

if ,if else ,if else if else,switch

switch的表达式为int或者可以自动转化成int的类型:int/byte/short,枚举;break问题

循环结构

while ,for,do while;

continue和break

Switch

case后只能是常量,不能是变量,且case后不能相同
default不建议省略,可以在任意位置,建议在最后
switch执行到break或者右侧大括号就结束了

面向对象基础

面向对象的发展史

基本数据类型
数组相同数据类型
结构体不同数据类型
不同数据类型,且可以在类中定义方法

定义类

(public) class 类名{

    1.private 数据类型 数据名;//加相应的getter,setter方法
    2.方法
    3.构造函数
} //类体
类名规范就是:开头大写,驼峰原则,参考文章开头规范
private 数据类型 数据名

规范就是private,设置get和set方法的目的是:

不直接修改该数据

方法

1.重载(Overload):两同三不同

两同:同一个类,同一个方法名

三不同:①参数列表不同:类型,个数,顺序

即返回值不同,形式参数名不同都不称为重载

构造函数

1.不用写返回值(系统自动为你返回一个对象类型)

2.如果自己不声明,系统会自动声明一个(对你是透明的),如果声明了,系统就不会为你声明

3.构造函数第一句都是 super,即调用父类的构造函数。上溯到Object对象;即有继承关系的调用

4.构造名必须和类名一致

5.通过new来调用

类中的关键字

this

普通方法中:调用本方法的对象

构造方法中:正要初始化的对象

调用其他的构造方法

super直接父类的引用
static将变量和方法变为静态方法,从属于类(而不是对象),通过类名就可以调用,存储与方法区中
package

必须位于非注释行第一句

包名:参考上文,域名倒着写,全部小写

import

引入外部的类;

导入类的静态属性:import static

final

修饰变量:该变量就变成了常量(命名规范:参考上文)

修饰方法:不可以被重写

修饰类:不能被继承

面向对象三大特征

封装

关键字:private,default,protected,public,default

目的:实现属性或者方法的封装,最终实现”高内聚,低耦合“

继承

关键字:extends

好处:代码重用;通过继承实现对现实世界的建模;类只能单继承

方法的重写

多态

有三个必要条件:

1.继承

2.方法的重写

3.父类引用指向子类

继承

动态绑定,静态绑定:动态绑定慢

Object类

Object介绍所有方法的根基类
Object所含的方法

1.toString

2.equals,hashcode

3.wait,notify,notifyAll

代码块(用{}括起来的代码)

局部代码块在方法中出现,限定变量声明出现,释放资源
构造代码块在类中方法出现;多个构造方法中相同的代码放到一块,每次调用构造方法都执行,并且在构造方法之前执行
静态代码块用于给类进行初始化,在加载的时候就执行,并且只执行一次。一般用于加载驱动
同步代码块

抽象类和接口

抽象类(abstract)

1.包含抽象方法的类一定是抽象类

2.不能被new

3.可以包含普通方法,成员变量,构造函数

4.必须被子类重写

接口(interface)

1.类可以实现接口,通过implements,一个类可以实现多个接口

2.接口之间可以多继承

3.接口实现的是现实世界中的一组规范,即如果你能。。。则必须能。。。。

重写(Override)

=:方法名一致

>=:子类权限修饰符可以大于等于父类

<=:子类返回类型小于父类返回类型;子类声明异常类型不能超过父类的类型

内存机制

堆(heap)

共享;

存放对象

不连续,灵活,速度慢

栈(stack)

每个线程

存放局部变量,系统自动分配,空间连续,速度快

方法区(meathod area)

共享

存放类的信息,代码,静态变量,字符串常量;

方法区同heap

程序计数器(PC register)每个线程
本地方法栈(native method stack)

每个线程

引用其他语言的代码

成员变量和局部变量的区别

成员变量

在类中位置不同

在内存中位置不同:位于堆中

声明周期不同

初始化不同:默认有初始值

局部变量

在类中位置不同

在内存中位置不同:位于栈中

初始化不同:默认没有初始值,必须初始化才可以使用

成员变量名和局部变量名一致时:采用就近原则

成员变量和静态变量的不同

所属不同
内存中位置不同

静态变量存储于方法的静态区

成员变量存储于堆内存

内存出现时间不同

静态方法随着类的加载而加载

成员变量随着对象的加载而加载,消失而消失

调用不同

垃圾回收器(GC,garbage collection)

发展史

Serial Old,Serial
Parallel Old,Parallel Scavenge
CMS,ParNew
G1我的电脑中的版本
ZGC截止发稿仍在实验版本

组成介绍

相关提示

程序员不能调用垃圾回收器,但是可以通过System.gc()建议回收
finalize:一般也不需要调用

异常机制

try-catch-finally 
声明异常throws
手动抛出异常throw
自定义异常 extends Expection或者他的子类

Arrays类(包含了对数组的排序,查找)

注意Comparable接口,可以定义排序的规则

容器(Collection)

用for循环或者迭代器

List(有序可重复)

ArrayList:底层用数组实现。线程不安全,效率高

LinkedList:底层用双向链表实现,线程不安全

Vector:底层用数组实现。线程安全,效率低

Set(无序不可重复)HashMap:内部使用hashmap实现

Map

用迭代器

Map(采用key-value存储数据)

HashMap:线程不安全,效率高

HashTable:线程不安全,效率高

Iterator

Iterator(通过它遍历容器中的元素)

常用类

包装类

实现了基本数据类型和数据的互相转化。

自动装箱,自动拆箱

String/StringBuilder/StringBuffer

String:不可变字符序列

(拼接用后两个)

StringBuilder:可变字符序列,线程不安全

StringBuffer:可变字符序列,线程安全

时间:Date,DateFormat,Clandar

Date:使用毫秒数来表示时间的概念

DateFormat:实现Date对象和String对象的互相转化(根据指定格式进行转化eg:yyyy -MM-DD       )

Clander:将人的日期的概念与Date有效转化

File(代表文件或者目录的一个抽象)
Math(数学类)
枚举如果要新建一组常量,建议使用枚举。不要学习和使用枚举的高级特性

I/O流

InputStream

FileInputStream

ByteArrayInputStream

ObjectInputStream:对象的序列化,实现空接口

DataInputStream:操作基本数据类型

BufferedInputStream

OutputStream

FileOutputStream

ByteArrayOutputStream

ObjectOutputStream:对象的序列化,实现空接口

DataOutputStream:操作基本数据类型

PrintInputStream:打印数据流

BufferedOutputStream

Reader

FileReader

InputStreamReader:将字节流转化为字符流

BufferedReader

Writer

FileWriter

InputStreamWriter:将字节流转化为字符流

BufferedWriter

定义多线程类的两种方式

Extends Thread
Implements Runnable

线程的状态

new新建状态
就绪状态调用start状态以后
运行状态
阻塞状态

sleep:不会释放持有的对象锁

join:等待另一个线程执行完成

wait:会释放所持有的对象锁

syncharinzed:运行同步代码,但是没有获得对象的锁,于是进入指定对象的锁池等待

终止

不建议使用stop,destory直接中止,因为不会释放锁,只会释放一些其他资源

建议通过增加bool变量,正常中止线程运行        

线程的优先级

总共有1-10;默认优先级为5
优先级别低只是意味着调用的概率低,不意味着不被调用

资源同步

synchorized修饰方法,语句块

死锁

建议不要同时持有多个对象的锁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值