赞
踩
封装:封装就是隐藏对象的属性和实现细节,仅对外公开接口。例如将类属性私有化,然后提供特定方法调用。
继承:继承机制允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
多态:多态同一个行为具有多个不同表现形式或形态的能力。如方法重载和重写
重载overload和重写override都是java多态的体现,重载用于一个类中同名方法拥有不同的参数列表。重写发生在子类与父类之间,重写方法可以改变返回值的类型,不能比父类被重写方法声明更多的异常。
==如果比较的是基本数据变量:比较两个变量保存的数据是否相等(不一定要类型相同)
如果比较的是引用数据变量:比较两个对象的地址值是否相等。
equals:如果没有重写比较的是地址是否相等,重写后比较内容是否相等
&:位运算与,不管成功与否都会吧判断条件全部执行
&&:逻辑与也是短路与及如果第一个条件不成立则不用执行第二个条件
STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容
经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer
的toString()方法
equals() // 比较对象的地址值是否相等,如果子类重写,则比较对象的内容是否相等;
hashCode() // 获取哈希码
toString() // 把数据转变成字符串
clone() // 创建并返回此对象的副本。
wait() // 多线程中等待功能
notify() // 多线程中唤醒功能
notifyAll() // 多线程中唤醒所有等待线程的功能
类型 | Abstract class | interface |
---|---|---|
继承 | 抽象类可以继承一个类实现多个接口(单继承,多实现);子类只可以继承一个抽象类 | 接口只可以继承接口;子类可以实现多个接口 |
构造方法 | 可以定义构造方法;可以有抽象方法和具体方法,也可以没有抽象方法 | 接口是抽象的,没有构造方法,且方法都是默认时抽象方法,但是jdk1.8,接口中的方法可以具体实现,用default关键字 |
实现方法 | 子类使用extend关键字来继承抽象类;如果子类不是抽象类的话,它需要提供抽象类中所有声明方法的实现 | 子类使用implements来实现接口,子类需要提供接口中所有声明的方法的实现 |
作用 | 把相同的东西提取出来,即代码复用 | 对类的行为进行约束,降低耦合 |
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中可以包含静态方法,接口中不能包含静态方法
5. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
6. 一个类可以实现多个接口,但只能继承一个抽象类。
字节流和字符流。字节流继承于InputStream、OutputStream,字符流继承于Reader、Writer。
public static int[] mysort(int[] list) {
int temp = 0;
for (int i = 0;i<list.length - 1;i++) {
for (int j = 0;j<list.length - i - 1; j++) {
if (list[j] > list[j+1]) {
temp = list[j];
list[j] = list[j+1];
list[j+1] = temp;
}
}
}
return list;
}
public static int binarySearch(int target, int[] a) { int low = 0; int high = a.length - 1; while(low <= high) { int mid = (low + high) / 2; if (a[mid] > target) { high = mid - 1; } else if (a[mid] < target) { low = mid + 1; } else { return mid; } } return -1; }
public static int primeNum(int range) {
int count = 0;
for(int i = 2;i <= range; i++) {
for(int j = 2; j <= i;j++) {
if(j<i && i%j==0) {
break;
} else if (j==i){
System.out.println(i);
count++;
}
}
}
return count;
}
当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都java.lang.Thowable的子类。
Error:程序无法处理的系统错误,编译器不做检查;是jvm需要担负的责任。
Exception:程序可以处理的异常,捕获后可能恢复;
RuntimeException(非受检异常)是程序应该负担的责任;
Checked Exception (受检异常)可检查异常时Java编译器应该负担的责任。
throw:
throws:
final 的用途
final 修饰的类叫最终类,该类不能被继承。例如String
final 修饰的方法不能被重写,但能够重载
final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。
finally
finally在异常处理时提供 finally块来执行任何清除操作。如果有finally的话,则不管是否发生异常,finally语句都会
被执行。一般情况下,都把关闭物理连接(IO流、数据库连接、Socket连接)等相关操作,放入到此代码块中。
finalize
finalize方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要清理工作。
finalize() 方法是在垃圾收集器删除对象之前被调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。 一般情况下,此方法由JVM调用,程序员不要去调用!
Collection是一个接口,它是Set、List等容器的父接口;Collections是个一个工具类,提供了一系列的静态方法来辅助容器操作,这些方法包括对容器的搜索、排序、线程安全化等等。
List、Set 是,Map 不是。Map是键值对映射容器,与List和Set有明显的区别,而Set存储的零散的元素且不允许有重复元素(数学中的集合也是如此),List是线性结构的容器,适用于按数值索引访问元素的情形。
List以特定索引来存取元素,可以有重复元素。Set不能存放重复元素(用对象的equals()方法来区分元素是否重复)。Map保存键值对(key-value pair)映射,映射关系可以是一对一或多对一。
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的
对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时
所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,
implementsSerializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)
来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的
writeObject(Objectobj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
两种实现方法:一种是继承Thread类;另一种是实现Runnable接口。两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如果继承了Thread类就无法再继承其他类了,显然使用Runnable接口更为灵活。
Java 5以后创建线程还有第三种方式:实现Callable接口
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监
控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定
池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行
状态。
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM
调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
synchronized,wait与notify
1.初始(NEW):新创建了一个线程对象,但还没有调用start()方法。
2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。
线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。
3.阻塞(BLOCKED):表示线程阻塞于锁。
4.等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。
5.超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。
6.终止(TERMINATED):表示该线程已经执行完毕。
加载和实例化、初始化、处理请求以及服务结束。
生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX
方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳
转,浏览器将会得到跳转的地址,并重新发送请求链接。
Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。
通过Spring Boot,可以轻松地创建独立的,基于生产级别的Spring的应用程序,您可以“运行”它们。大多数Spring Boot应用程序需要最少的Spring配置。
application.properties
application.yml
spring-boot-devtools
Spring Loaded
Jrebel
模版热部署
mybatis-spring-boot-starter
mysql-connector-java
Java 8 虚拟机规范规定,Java 虚拟机所管理的内存将会包括以下几个区域:
程序计数器(Program Counter Register)
Java 虚拟机栈(Java Virtual Machine Stacks)
本地方法栈(Native Method Stack)
Java 堆(Java Heap)
方法区(Methed Area)
GC是垃圾收集的意思(GabageCollection),内存处理是编程人员容易出现问题的地方,忘记或者错
误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用
域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。