java 面试复习 1
类 {
main{
新对象
对象.属性;
对象.方法
}
对象{
属性,
方法
}
}
封装性
体现一:将类的属性 xxx 私化(private),同时,提供公共的(public)方法来获取(getXxx)和设置(setXxx)此属性的值(public, private 等四种权限都是封装性的体现)
体现二:不对外暴露的私有的方法
体现三:单例模式(将构造器私有化)
体现四:如果不希望类在包外被调用,可以将类设置为缺省的
多态的好处
没有了多态,就必须多造备注掉的两个 func(Dog dog),func(Cat cat)两个类,有了多态,只用一个 animal 后,就可以直接调用 test.func(new Dog()),animal 的子类。
public class AnimalTest {
public static void main(String[] args) {
AnimalTest test = new AnimalTest();
test.func(new Dog());
test.func(new Cat());
}
public void func(Animal animal){//Animal animal = new Dog();
animal.eat();
animal.shout();
}
// public void func(Dog dog){
// dog.eat();
// dog.shout();
// }
// public void func(Cat cat){
// cat.eat();
// cat.shout();
// }
}
class Animal{
public void eat(){
System.out.println("动物:进食");
}
public void shout(){
System.out.println("动物:叫");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("狗吃骨头");
}
public void shout(){
System.out.println("汪!汪!汪!");
}
public void watchDoor(){
System.out.println("看门");
}
}
class Cat extends Animal{
public void eat(){
System.out.println("猫吃鱼");
}
public void shout(){
System.out.println("喵!喵!喵!");
}
}
对象的多态性
Person p = new Students();
new 的对象体现的是多种形态:父类的引用指向子类的对象
虚拟方法调用
编译时看左边,运行时看右边
equals()方法
-
java.lang.Object 类: Object 类是所 Java 类的根父类, 只声明了一个空参的构造器
-
Object 类中 equals()的定义:
public boolean equals(Object obj) {
return (this == obj);
}
说明:Object 类中定义的 equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
通常情况下,我们自定义的类如果使用 equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们
- 就需要对 Object 类中的 equals()进行重写.
- 重写的原则:比较两个对象的实体内容是否相同.
class User{
String name;
int age;
//重写其equals()方法
public boolean equals(Object obj){
// 判断地址相同,相同就直接true
if(obj == this){
return true;
}
// 判断obj是不是一个User,然后转成User,才能出现.age和.name来判断
if(obj instanceof User){
User u = (User)obj;
return this.age == u.age && this.name.equals(u.name);
}
return false;
}
}
Java 中的 JUnit 单元测试
-
步骤:
-
1.中当前工程 - 右键择:build path - add libraries - JUnit 4 - 下一步
-
2.创建 Java 类,进行单元测试。
-
此时的 Java 类要求:① 此类是 public 的 ②此类提供公共的无参的构造器
-
3.此类中声明单元测试方法。
-
此时的单元测试方法:方法的权限是 public,没返回值,没形参
-
4.此单元测试方法上需要声明注解:@Test,并在单元测试类中导入:import org.junit.Test;
-
5.声明好单元测试方法以后,就可以在方法体内测试相关的代码。
-
6.写完代码以后,左键双击单元测试方法名,右键:run as - JUnit Test
-
说明:
-
1.如果执行结果没任何异常:绿条
-
2.如果执行结果出现异常:红条
代码块
对 Java 类或对象进行初始化
class Person {
public static int total;
static {
total = 100;//为total赋初值
}
…… //其它属性或方法声明
}
静态代码块:用 static 修饰的代码块
- 可以有输出语句。
- 可以对类的属性、类的声明进行初始化操作。
- 不可以对非静态的属性初始化。即:不可以调用非静态的属性和方法。
- 若有多个静态的代码块,那么按照从上到下的顺序依次执行。
- 静态代码块的执行要先于非静态代码块。
- 静态代码块随着类的加载而加载,且只执行一次
非静态代码块:没有 static 修饰的代码块
- 可以有输出语句。
- 可以对类的属性、类的声明进行初始化操作。
- 除了调用非静态的结构外,还可以调用静态的变量或方法。
- 若有多个非静态的代码块,那么按照从上到下的顺序依次执行。
- 每次创建对象的时候,都会执行一次。且先于构造器执行
class Person {
public static int total;
static {
total = 100;
System.out.println("in static block!");
}
}
public class PersonTest {
public static void main(String[] args) {
System.out.println("total = " + Person.total);
System.out.println("total = " + Person.total);
}
}
in static block total=100 total=100
idea 配置
bin 打开 idea.exe.vmoptions
-Xms128m
-Xmx750m
-XX:ReservedCodeCacheSize=512m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-XX:CICompilerCount=2
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-ea
-Dsun.io.useCanonCaches=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-Djdk.attach.allowAttachSelf=true
-Djdk.module.illegalAccess.silent=true
-Dkotlinx.coroutines.debug=off
64 位系统,内存大于 8G,开发大型项目,java/android 项目,修改以下三个参数:
-Xms128m//
-Xms512m
设置初始内存数,提高java程序启动速度
-Xmx750m//
-Xmx1500m
这个数值可以减少内存Garage收集频率,提高程序性能
-XX:ReservedCodeCacheSize=512m
500m,
idea 中的快捷键
- 1.补全代码的声明:Ctrl+Shift+Space
- 1.1 补全: Alt + Enter
- 1.2 类名或接口名提示: Ctrl + Alt + 空格
- 1.3 引入方法返回值对应的变量: Ctrl + Alt + V
- 2.快速打开方法: Alt + 鼠标左键
- 3.使用单行注释:ctrl + /
- 4.使用多行注释: ctrl + shift + /
- 5.方法间快速移动:Alt+Up Alt+Down
- 6.复制指定行的代码:Ctrl + D
- 7.删除指定行的代码:ctrl + X
- 7.显示方法的参数信息:Ctrl + P
- 8.上下移动代码:Shift + Alt + Up / Shift + Alt + Down
-
- 将一段代码抽取成方法: Crtl + Alt + M
-
9.切换到下一行代码空位:shift + enter
-
12.将光标移到前或后编辑历史记录处: Ctrl+ Alt+ Right
-
12.1 跳到大括号的开头/结尾: Ctrl+[ / Ctrl+]
-
12.2 高亮错误或警告快速定位 F2 / Shift + F2
-
22.格式化代码: Ctrl+Alt+L
-
23.选中数行,整体往后移动:tab
-
24.选中数行,整体往前移动:shift + tab
-
25 浮动窗显示类结构,通过输入关键词完成快速定位类元素:Ctrl + F12
-
26.重命名变量、文件、类等:Shift + F6
-
27.字母大小写转换: Ctrl + Shift + U
-
30.调出生成 getter/setter/构造器等结构: Alt+Insert
-
30.把代码包在一块内,例如 try/catch: Ctrl+Alt+T
-
32.快速查找:ctrl + F
-
32 查找类比如 StringBuffer 里面的所有的方法:ctrl + F12
-
33.关闭当前其他窗口:alt + 关闭窗口