java基础
- 1. java语言的特点
- 2.面向对象
- 3.java为什么是健壮的
- 4. 面对对象与面向过程
- 5.java的基础设计结构
- 6.数据结构
- 7.strictfp关键字(了解)
- 8.自增和自减
- 9.逻辑运算符
- 10.eqlues和==的区别
- 11.不可变字符串
- 12.char数组打印不为什么不是地址值
- 13.ArrayList为什么直接打印的不是地址值
- 14.数组的初始值
- 15.为什么成员变量有默认值
- 16.throw和thorws的区别
- 17.构造代码块可以里的数据可以被static修饰吗,为什么?
- 18.代理模式
- 19.方法里可以定义静态变量吗?
- 20.值传递和引用传递
- 21. finalize
- 22.jvm内存结构
- 23.BIO、NIO、AIO
- 24.StringBuilder/StringBuffer/String
1. java语言的特点
- 面对对象(oop三原则)
- 简单性
- 跨平台
- 安全性
- 健壮的
2.面向对象
简单来说,面向对象是一种程序设计基础。他把重点放在了数据(即对象)和对象的接口上。
3.java为什么是健壮的
java投入的大量的经历进行早期的问题检测、运行时的检测,并消除了容易出错的情况
- java编译器可以检测出许多在其他语言中仅在运行时才能检测到的问题
- 采用了指针模型可以消除重写内存和数据损坏的可能性
4. 面对对象与面向过程
- 面对对象:
优点:易维护、易拓展、易复用
缺点:性能比面向过程低
5.java的基础设计结构
- 基本数据类型
- 注释
- 输入输出
- 控制流
- 变量
- 运算符
- 数组
- 字符串
6.数据结构
- 基本数据结构
类型 | 字节 | 取值范围 | 默认值 | 包装类 |
---|---|---|---|---|
byte | 1 | -128~127 | 0 | Byte |
short | 2 | -32768~32767 | 0 | Short |
int | 4 | -2147483648~2147483647 | 0 | Integer |
long | 8 | -2的8*8-1次方~2的62次方-1 | 0 | Long |
float(单精度) | 4 | 1.4E-45~3.4028235E38 | 0.0 | Float |
double | 8 | -4.9E-324~1.7976931348623157E308 | 0 .0 | Double |
char | 2 | 0~65535 | u0000 | Character |
boolean | 1 | true或false | false | Boolean |
- 引入类型
类、接口类型、数组类型、枚举类型、注解类型。
7.strictfp关键字(了解)
对于使用 strictfjp 关键字标记的方法必须使用严格的浮点计算来生成可再生的结果。
如果将一个类标记为strictfp, 这个类中的所有方法都要使用严格的浮点计算。
8.自增和自减
- ++a和a++的区别?
9.逻辑运算符
逻辑运算符 | 逻辑功能 |
---|---|
&(与) | 两边同时满足(找假) |
|(或) | 一边为真则为真(找真) |
!(非) | 取反 |
^(异或) | 相同为false,不同为true |
&(逻辑与) | 有false则false,若&&左边表达式或者值为false则右边不进行计算 |
|(逻辑或) | 有true则true,若 |
&和&&的区别:&比较笨,它需要两边都看一遍,在返回。短路是如果一边满足条件就不会在去看第二个
10.eqlues和==的区别
==引用类型比较的是地址值,基本类型比较的是值本身
没有重写(Object)的eqlues就是==,重写后比较的就是属性值
11.不可变字符串
String都是被final修饰的,定义的都是常量。
如果修改String的内容,都会重新在创建出来一个对象
//包装类也是不变类
12.char数组打印不为什么不是地址值
- char类型的数组就当于一个字符串
- 因为输出流System.out是PrintStream对象,PrintStream有多个重载的println方法,其中一个就是public void println(char[] x),直接打印字符数组的话,不像int[]等其他数组,它会直接调用这个方法来打印,因而可以打印出数组内容,而不是地址。
13.ArrayList为什么直接打印的不是地址值
ArrayList重写了toString方法,打印这个对象时print调用这个对象的toString方法
Syetem.out.println() 打印谁就是调用那个对象的toString方法
14.数组的初始值
-
基本类型初始值 整形数就是0 浮点数是0.0 boolean是false char是u0000
-
引用类型的默认值都是null Object也是引用类型
15.为什么成员变量有默认值
- 那得多亏了构造函数,想要new对象必须至少拥有一个构造函数,拿默认的无参构造函数来讲,虽然表面上看着它什么也没做,其实底层不单只是为对象分配内存,它也同时初始化对象上的成员变量。
- 每次创建对象时构造器都会初始化成员变量
public class myConstruction{
public static void main(String[] args) {
System.out.println(new a().i); //10
System.out.println(new a(666).i);//0
}
}
class a{
int i ;
public a(){
i=10;
}
public a(int a ){
}
16.throw和thorws的区别
17.构造代码块可以里的数据可以被static修饰吗,为什么?
不可以
18.代理模式
19.方法里可以定义静态变量吗?
不可以
Java中静态变量只能在类主体中定义,不能在方法中定义。 静态变量属于类所有而不属于方法。
public class Test {
static int i = 0;
public int am() {
static int a = 0;//Illegal modifier for parameter a; only final is permitted
a++;
return a;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test test = new Test();
test.am();
int j = test.am();
System.out.println(j);//编译错误
}
}
20.值传递和引用传递
- 值传递,传递的是原来值的副本。
- 引用传递,除了一些特殊的(String,包装类属于不可变类),一般的引用类型在进行传递的时候,一开始形参和实参都是指向同一个地址的,这个时候形参对对象的改变会影响到所引用的对象上。
21. finalize
finalize设计的目的是保证对象在被垃圾收集前完成特定资源的回收
22.jvm内存结构
23.BIO、NIO、AIO
- BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
- NIO:New IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
- AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。
24.StringBuilder/StringBuffer/String
StringBuffer、StringBuilder和String一样,也用来代表字符串。
String类是不可变类,任何对String的改变都 会引发新的String对象的生成
StringBuffer、StringBuilder是可变类,任何对它所指代的字符串的改变都不会产生新的对象
StringBuffer 线程安全 多线程操作
StringBuilde 线程不安全 单线程操作