面向过程性能高,面向对象易维护,易复用,易扩展。
JVM:Java 虚拟机,是运行 Java 字节码(.class文件)的虚拟机。
JDK:Java开发工具包
JRE:Java运行环境
关系:JDK包含JRE和JAVA的开发工具
JRE包含JVM和JAVA的核心类库
JAVA 与C++比较
重写:子类重新编写父类的方法,方法名相同,参数相同。
重载:方法名相同,参数不同
StringBuilder:可变的,线程不安全,可在单线程中使用
StringBuffer: 可变的,线程安全,多线程中使用
装箱就是 自动将基本数据类型转换为包装器类型;拆箱就是 自动将包装器类型转换为基本数据类型。
Integer i = 10; //装箱 int n = i; //拆箱
成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员
变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所
修饰;但是,成员变量和局部变量都能被 fifinal 所修饰。
== : 它的作用是判断两个对象的地址是不是相等。
equals() : 它的作用也是判断两个对象内容是否相等
两个obj,如果equals()相等,hashCode()一定相等
两个obj,如果hashCode()相等,equals()不一定相等
HashSet 检查重复 :先获取hashcode 如果相等,再用equals() 比较
oracle 查询那些表锁
select * from v$locked_object a, dba_objects b where b.object_id=a.object_id
值传递(值调用)和引用传递(引用调用)
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量. 引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 ,所以一个方法可以修改引用传递所对应的变量值,而不能修改值传递所对应的变量值。
一般认为,java内的传递都是值传递
一个进程可以包含多个线程。
进程是程序执行的基本单位,线程是cpu调度的基本单位。
一般来说,
进程是为了程序的并发执行,线程是为了并发的执行程序!
进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位。
线程的状态:
影响线程的方法:
https://blog.csdn.net/Andya_net/article/details/106206807
package com.company; import java.util.ArrayList; import java.util.List; import java.util.concurrent.*; public class Mianshi extends Thread{ public static void main(String[] args) throws ExecutionException, InterruptedException { CreateThread createThread = new CreateThread(); createThread.start(); NewThread newThread = new NewThread(); newThread.run(); Thread thread = new Thread(newThread); thread.start(); CreateThreadByOtherWay chy =new CreateThreadByOtherWay(); chy.CallableThread(); BasicThreadPool basicThreadPool = new BasicThreadPool(); basicThreadPool.ThreadPool(); } //继承Thread类 public static class CreateThread extends Thread{ @Override public void run() { System.out.println("通过thread创建了一个线程"); } } //实现Runnable接口 public static class NewThread implements Runnable{ @Override public void run() { System.err.println("通过接口Runnable创建线程"); } } //通过ExecutorService 和Callable<T>实现有返回值的线程 public static class CreateThreadByOtherWay implements Callable<String> { private String num; public CreateThreadByOtherWay(String num){ this.num =num; } public CreateThreadByOtherWay(){ } @Override public String call() throws Exception { return num; } public void CallableThread () throws ExecutionException, InterruptedException { ExecutorService pool = Executors.newFixedThreadPool(5); List<Future> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { Callable<String> chy = new CreateThreadByOtherWay(i+"yyds"); Future<String> future = pool.submit(chy); list.add(future); } for (Future<String> f:list ) { System.err.println(f.get()); } } } //基于线程池创建 public static class BasicThreadPool { public void ThreadPool() { ExecutorService threadPool = Executors.newFixedThreadPool(10); for (int i = 0; i < 10; i++) { threadPool.execute(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + " is running !"); } }); } } } }
Throwable是所有错误或异常的父类
异常和错误的区别:异常能被程序本身处理,错误是无法处理。
Throwable 类常用方法: getMessage():返回异常发生时的详细信息,toString():返回异常发生时的简要信息getLocalizedMessage():返回异常对象的本地化信息,printStackTrace() 在控制台上打印Throwable对象封装的异常信息
异常处理方式:抛出异常、使用try catch finally捕获并处理异常。finally:无论是否捕获或处理异常,fifinally 块里的语句都会被执行。当在 try 块或 catch 块中遇到 return 语句时,fifinally 语句块将在方法返回之前被执行
throw和throws的区别:
位置不同:throws作用在方法上,后面跟着的是异常的类;而throw作用在方法内,后面跟着的是异常的对象
功能不同: throws用来声明方法在运行过程中可能出现的异常,throw用来抛出封装了异常信息的对象
常见面试题:[https://blog.csdn.net/ThinkWon/article/details/104390689](https://blog.csdn.net/ThinkWon/article/details/104390689
Java序列化是不想序列的变量添加transient关键字修饰,只能修饰变量,不能修饰方法和类
键盘输入变量的值的两种方式:
方式一: Scanner input = new Scanner(System.in); String s = input.nextLine(); input.close(); 方式二: BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); String s = input.readLine();
Java 中的IO流
Java I0 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。
浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。
深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容。