java知识


关于抽象类
JDK 1.8以前,抽象类的方法默认访问权限为protected
JDK 1.8时,抽象类的方法默认访问权限变为default

关于接口
JDK 1.8以前,接口中的方法必须是public的
JDK 1.8时,接口中的方法可以是public的,也可以是default的
JDK 1.9时,接口中的方法可以是private的

Integer i01 = 59;
int i02 = 59;
Integer i03 =Integer.valueOf(59);
Integer i04 = new Integer(59)。

引用数据类型是引用传递(call by reference),基本数据类型是值传递(call by value)
值传递不可以改变原变量的内容和地址---》原因是java方法的形参传递都是传递原变量的副本,在方法中改变的是副本的值,而不适合原变量的
引用传递不可以改变原变量的地址,但可以改变原变量的内容---》原因是当副本的引用改变时,原变量 的引用并没有发生变化,当副本改变内容时,由于副本引用指向的是原变量的地址空间,所以,原变量的内容发生变化。

结论:1.值传递不可以改变原变量的内容和地址;
           2.引用传递不可以改变原变量的地址,但可以改变原变量的内容;

1.1简单数据类型
    1.1.1数值型
        1.1.1.1整数类型(byte,short,int,long)
        1.1.1.2浮点类型(float,double)
    1.1.2字符型(char)
    1.1.3布尔型(boolean)
1.2引用数据类型
    1.2.1类(class)
    1.2.2接口(interface)
    1.2.3数组
switch(expr1) expr1 只能是一个整数表达式或者枚举常量(更大字体)整数表达式可以是 int基本类型或者是Integer包装类由于
byte  short  char 都可以隐士转化为int 所以也是可以的long  float  double 和  boolean 类型 不符合规范,并且也不能被隐式转换为int类型
所以不能作用于switch    string 类型是java7 开始支持的

java线程 semaphore    reentrantLock  future  countDownLatch


如果子类构造器没有显示的调用超类的构造器,则将自动的调用超类默认(没有参数)的构造器。如果超类没有不带参数的构造器,并且在子类的构造器中没有显示地调用超类的其他构造器,则java编译器将报告错误

intValue()是把Integer对象类型变成int的基础数据类型; Integer a = Integer.parseInt(str1);
parseInt()是把String变成int的基础数据类型;
Valueof()是把String转化成Integer对象类型(现在JDK支持自动拆箱装箱)

1.成员变量:编译和运行都参考左边
2.成员函数(非静态):编译看左边,运行看右边
3.静态函数:编译和运行都看左边

java的包机制;

为了更好的组织类,Java提供了包机制。包是类的容器,用于分隔类名空间。如果没有指定包名,所有的实例都属于一个默认的无名包。Java中的包一般均包含相关的类,java是跨平台的,所以java中的包和操作系统没有任何关系,java的包是用来组织文件的一种虚拟文件系统。
import语句不是将源文件拷贝到此处,只是一种引用,编译到此处需要读取这个外部文件,定义在同一个包内的类可以不经import直接相互使用


静态内部类可以直接访问外围类的静态数据,包括私有数据,但不能访问非静态数据;
非静态内部类可以访问外围类的数据,包括私有数据


java栈内存 堆内存

Java把内存划分成两种;一种是栈内存,另一种是堆内存。
  栈式存储:
  在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当超过变量的作用域后,Java会自动释放掉为该变量
分配的内存空间,该内存空间可以立即被另作它用。
  优点:存取速度比堆要快, 仅次于寄存器,  栈数据可以共享。
  缺点:存在栈中的数据大小与生存期必须是确定的,缺乏灵活性
  栈中主要存放一些基本类型的变量(,int, short, long, byte, float,double, boolean, char)和对象句柄
 
堆式存储:
  堆内存用来存放由new创建的对象和数组,在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
  优点:堆是由垃圾回收来负责的
  堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,  因为它是在运行时动态
会自动收走这些不再使用的数据
  缺点是:  由于要在运行时动态分配内存,  存取速度较慢。
 
jvm布局
  栈有两部分,Java线程栈以及本地方法栈。里面存放的都是栈帧,一个栈帧代表的就是一个函数的调用,在栈帧里面存放了函数的形参,
 函数的局部变量,返回地址等,在这个基本架构图中,可以看出JVM还定义了一个本地方法栈,  本地方法栈是为Java调用本地方法
(这些本地方法是由其他语言编写的)服务的。
  JVM中栈有两个,但是堆只有一个,每一个线程都有自已的线程栈[线程栈的大小可以通过设置JVM的-xss参数进行配置,32位系统下,
JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K],线程栈里面的数据属于该线程私有,  但是所有的线程都共享一个堆空间,
堆中存放的是对象数据,什么是对象数据
  排除法,排除基本类型以及引用类型以外的数据都将放在堆空间中。其
  由方法区和惟旦所右线程土京的数掘

针对数组提供了length属性来获取数组的长度
针对字符串提供了length()方法来获取字符串的长度
针对泛型集合类提供了size()方法来获取元素的个数

生成字符串的两个类String和StringBuffer中,前者生成的字符串是不变字符串,不能直接对它的内容进行修改,而后者生成的字符串是可变的,可以对其内容进行修改。而Character类是对字符类型的类封装。Vector类是Java语言提供给用户的一种通用类,是一种链表结构的类型。


当内部类和外部类成员名称相同时,可以通过“外部类.this.成员”的形式引用外部类的成员
在定义变量时,final修饰的变量既可以在定义时赋值,也可以在构造方法中赋值,因为匿名内部类没有构造方法,所以使用final变量必须在
定义时初始化
public class  Test{
    private int m;
    public void go(int x,final int y){
    int a;
    final int b = 10;
    new  Thread(){
    public void run(){
    //访问外部类的成员变量
    System.out.println("m="+m);
    
    //System.out.println("x="+x);不合法
    //访问final修饰的方法参数
    System.out.println("y="+y);
    //System.out.println("a="+a);不合法
    //访问final修饰的方法变量
    System.out.println("b="+b);
}
}
}
}  

匿名内部类在访问外部方法的局部变量或参数时,局部变量和参数需要使用final修饰,否则会出现编译错误

在File类中没有提供判断文件是否为空的方法,但是可以借助length()方法的返回值进行判断


在使用Buffered缓冲流读写文件时,实现过程引入了缓冲区机制,即读写操作先将内容放入缓冲区。因此,读写完毕之后,如果不将缓冲区的内容刷新到文件,则文件内容为空。调用flush()和close()方法


Java提供了两种方式实现文件的锁定,一种是使用RandomAccessFile实现,另一种是使用FileChannel实现

非静态 初始化块在每次创建对象都会执行一次,执行顺序在构造方法之前,静态初始化块是在类第一次进行加载的执行。

DataInputStream和DataOutputStream在使用时需要配合使用,否则会产生乱码

将一个用户线程设置为守护线程的方法是在调用start()方法之前调用setDaemon()方法

序列化是一种用来处理对象流的机制,所谓对象流就是将对象的内容进行流化。对象序列化和反序列化的过程就是将对象写入字节流和从字节流
中读取对象的过程。
Java对象序列化是参与序列化的内容包含以下几个方面:
    1.属性
    2.类名
不能被序列化的内容有以下几个方面:
    1.方法
    2.有static修饰的属性
    3.有transient修饰的属性

如何过滤字符串前后的空格:
1.使用字符串替换
2.使用substring()
3.使用StringTokenizer类
如何实现日期格式和字符串之间的转化
1.format()方法
2.parse()方法

String、StringBuffer和StringBuilder有什么区别
String类代表定长字符串,其内容在创建之后不可更改
StringBuffer类与String类相似,代表的是可变长的字符串缓冲区,通过特定的方法可以改变字符串序列的长度和内容,对于多线程操作是安全的。
在字符串的链接操作上提供的性能和效率都优于String类的“+”的append()方法。
StringBuilder类是StringBuffer类的一个等价类,不同的是它是非线程安全的,效率高

反射主要是指程序可以访问、检测和修改其本身状态或行为的一种能力
反射机制主要实现以下功能:
(1)在运行时判断任意一个对象所属的类型
(2)在运行时构造任意一个类的对象
(3)在运行时判断任意一个类所具有的成员变量和方法
(4)在运行时调用任意一个对象的方法,甚至可以调用private方法

Statement可用于执行SQL语句:
ResultSet executeQuery(String sql) //执行select语句,返回一个Resultset类型对象,使用next()方法判断是否还有下一行记录
int executeUpdate(String sql) //执行insert、delete和update语句
boolean execute(String sql)//执行create和drop等语句

Statement用于执行静态SQL语句并返回它所产生结果的对象,在执行时必须指定一个事先准备好的SQL语句
PreStatement表示预编译的SQL语句,可以动态包含参数"?"

SELECT  字段名,分组函数
FROM  table
[WHERE 查询条件]
[分组字段]
[分组函数]
[ORDER BY排序字段]

猜你喜欢

转载自blog.csdn.net/lzh_86/article/details/80506899