1 - & 与 && 的区别:

  • &:不管左边是true还是false,右端都会进行运算;
  • &&:当左端为false时,右端不再进行运算;
  • 即在运算时,前面为false,即可判断该条件为false了,后面没必要再算了   ----建议使用 &&.

2 - | 与 || 的区别:

  • |:不管左端,右端照算;
  • ||:左端为true时,右端不用算(最终结果已经可以确定为true了);
  • 建议用 ||

3 - java中内存的基本结构:

4 - this关键字的使用:

  • 1 - 当形参与成员变量重名时,如果在方法内部需要使用成员变量,必须添加this来表明该变量的类成员;
  • 2 - 在任意方法内,如果使用当前类的成员变量或成员方法可以在其前面添加this,增强程序的阅读性;
  • 3 - this可以作为一个类中,构造器相互条用的特殊格式;
public Person(String name){
this(); //调用本类中的无参构造方法
this.name = name;
}
public Person(String name, int age){
this(name); //调用有一个参数的构造方法
this.age = age;
}

5 - thissuper的区别:

No. 区别点 this super
1 访问属性 访问本类中的属性,如果本类中没有此属性,则从父类中继续查找 访问父类中的属性
2 调用方法 访问本类中的方法 直接访问父类中的方法
2 调用构造器 调用本类构造器,必须放在构造器的首行 调用父类构造器,必须放在子类构造器的首行
4 特殊 表示当前对象 无此概念

6 - 权限修饰符的区别:

  • private :无法被子类继承,也无法被外部类调用;
  • protected :显示的表示可以被子类继承;
  • public : 可以被外部类直接调用;

7 - java中的多态:

Person 父类,有eat(),walk();
Man 和 Woman 为继承了 Person 类的子类,并且都重写了eat()walk()方法,
另外,Woman类中有一个自己的方法,即shooping()

Man m = new Man();
m.eat();
m.walk();
System.out.println(); //*【子类对象的多态性】:父类的引用指向子类对象
Person p1 = new Man(); //向上转型
//虚拟方法调用:通过父类的引用指向子类对象的实体,当调用方法时,执行的是子类重写父类的方法
p1.eat();
p1.walk(); Person p2 = new Woman();
p2.eat();
p2.walk();
Woman w = (Woman)p2; //向下转型
w.shooping();

补充:instanceof:类型判断

//格式:对象p instanceof 类A
if(p1 instanceof Woman){
//如果p1是Woman类型,则可以转型
Woman w1 = (Woman)p1;
w1.shooping();
}

8 - static修饰属性(类变量):

1.由类创建的所有对象,都共用这一个属性
2.当其中一个对象对此属性进行修改,会导致其他对象对此属性的一个调用。vs 实例变量(非static变量修饰的属性
3.类变量随着类的加载而加载的,而且独一份
4.静态的变量可以直接通过“类.类变量”的形式来调用
5.类变量的加载要早于对象。所以当有对象以后,可以“类.类变量”使用。但是“类.实例变量”是不行的。
6.类变量存在与静态域中。

class SportMan{
//实例变量(随着对象的创建而被加载的)
String name;
int age;
//类变量
static String nation; }

8 - static修饰方法(类方法):

1.随着类的加载而加载,在内存中也是独一份
2.可以直接通过“类.类方法”的方式调用
3.内部可以调用静态的属性或静态的方法,而不能调用非静态的属性或方法。反之,非静态的方法可以调用静态的属性或静态的方法
>静态的方法内是不可以有this或super关键字的!
注:静态的结构(static的属性、方法、代码块、内部类)的生命周期要早于非静态的结构,被回收也要晚于非静态的结构

>可以简单记住:加了static的方法和变量,可以不new一个对象而直接通过类.方法名类.变量名来调用,例如:

class Black{
Test.bianliang; //直接调用,而不需要new一个
Test.fangfa(); //直接调用,而不需要new一个
}
Class Test{ public static int bianliang = 666; public static void fangfa(){
System.out.println("测试方法");
}
}

9 - 单例模式

【推荐阅读博客】:https://blog.csdn.net/goodlixueyong/article/details/51935526
1.解决的问题:使得一个类只能创建一个对象。
2.如何实现?见如下4步

//饿汉式
public class TestSingleton{
public static void main(String[] args){
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getINstance();
System.out.println(s1 == s2); //比较两个对象的引用是否一样
//而equal()用来比较两个对象是否一样
}
} //只能创建Singleton的单个实例
class Singleton{
//1.私有化构造器,使得在类的外部不能够调用次构造器
private Singleton(){ } //2.在类的内部创建一个类的实例
private static Singleton instance = new Singleton(); //3.私有化此对象,通过公共的方法来调用
//4.此公共的方法,只能通过类来调用,因为设置为static的,同时类的实例也必须为static声明的
public static Singleton getInstance(){
return instance;
}
}
ture
//懒汉式:可能存在线程安全问题
public class TestSingleton1{
public static void main(String[] args){
Singleton1 s1 = Singleton1.getInstance();
Singleton1 s2 = Singleton1.getINstance();
System.out.println(s1 == s2);
}
} class Singleton1{
//1.私有化构造器
private Singleton1(){ } //2.在类的内部创建一个类的实例,并使其为私有和静态的
private static Sintleton1 instance = null; //3.返回对象
public static Singleton1 getInstance(){
if(instance == null){
instance = new Singleton1();
}
return instance;
}
}

10 - final修饰

  • 1.final修饰类:这个类就不能被继承;
  • 2.final修饰方法:这个方法不能被子类重写;
  • 3.final修饰属性:此属性就是一个常量,一旦初始化,就不能再赋值。习惯上常量有大写字母表示;

11 - java集合

Collection接口:

  • Set:元素无序、不可重复的集合;
  • List:元素有序,可重复的集合;

Map接口:具有映射关系“key-value”的集合;

12 - java中的接口

  • 1.接口可以看作是一个特殊的抽象类。是常量与抽象方法的一个集合,不能包含变量、一般的方法。
  • 2.接口是没有构造器的;
  • 3.接口定义的就是一种功能。 此功能可以被类所实现(implements);
比如:class CC extends DD implements AA
  • 4.实现接口的类,必须要重写其中的所有的抽象方法,方可实例化。若没有重写,则仍为抽象类;
  • 5.类可以实现多个接口。 ----- java中类的的继承是单继承的;
  • 6.接口与接口之间也是继承的关系,而且可以实现多继承。
  • <5、6是面试的重点>

13 - 集合的使用

  • Collection接口:
  • List接口:存储有序的,可以重复的元素 ---- 相当于“动态”数组;
    》添加进List集合中的元素(或对象)所在的类一定要重写equals()方法;
  • ArrayList(主要的实现类)
  • LinkedList(链表形式的实现类,更适用于频繁的插入、删除操作)
  • Vector(古老的实现类、线程安全的,但效率要低于ArrayList)
  • Set接口:存储无序的,不可重复的元素 ---- 相当于高中的集合概念
    》添加进Set集合中的元素所在的类一定要重写equals()hashCode()方法;
  • HashSet(主要的实现类)
  • LinkedHashSet(是HashSet的子类,当我们遍历集合元素时,是按照添加进去的顺序实现的)
  • TreeSet(可以按照添加进集合中的元素的制定属性进行排序)
  • 要求TreeSet添加进的元素必须是同一个类的!
  • 两种排序方式:
  • 自然排序:
  • ①要求添加进TreeSet中的元素所在类implementS Comparable接口
  • ②重写compareTo(Object obj),在此方法内指明按照元素的哪个属性进行排序
  • ③向TreeSet中添加元素即可,若不实现此接口,会报运行时异常
  • 定制排序:
  • ①创建一个实现Comparator接口的实现类的对象,在实现类中重写Comparator的方法
  • ②在此compare()方法中指明按照元素所在类的哪个属性进行排序
  • ③将此实现Comparator接口的实现类的对象作为形参传递给TreeSet的构造器中
  • ④向TreeSet中添加元素即可,若不实现次接口,会报运行时异常
  • 》要求重写的compareTo()或者compare()方法与equals()和hashCode()方法保持一致。
  • Map接口:存储“键-值”对的数据 ---- 相当与高中的“函数 y = f(x)”
  • key是不可重复的,使用Set存放。value可以重复,使用Collection来存放的。一个key-value构成一个entry(Map.Entry),entry使用Set来存放
  • HashMap:主要的实现类,可以添加null键,null值
  • LinkedHashMap:是HashMap的子类,可以按照添加进Map的顺序实现遍历
  • TreeMap:需要按照key所在类的制定属性进行排序,要求key是同一个类的对象,对key考虑使用自然排序 或 定制排序
  • HashTable:是一个古老的实现类,线程安全的,不可以添加进null键,null值;不建议使用。
  • 子类:Properties:重用来处理属性文件(如数据库的配置文件)

14 - java多线程

//使用实现Runnable接口的方式,售票
/**
* 此线程会存在线程安全问题
* 2.如何来解决线程的安全问题?
* 必须让一个线程操作共享数据完毕后,其他线程才有机会参与共享数据的操作
*
* 3.java如何实现线程的安全:线程的同步机制
*
* 方式一:同步代码块
* synchronized(同步监视器){
* //需要被同步的代码(即为操作共享数据的代码)
* }
* 1.共享数据:多个线程共同操作的同一个数据(变量)
* 2.同步监视器:由一个类的对象来充当。哪个线程获取此监视器,谁就执行大括号里被同步的代码。俗称:锁
* 要求:所有的线程必须共用同一把锁!
* 注:在实现的方式中,考虑同步的话,可以使用this来充当锁。但是在继承的方法中,慎用this
*
* 方式二:同步方法
* 将操作共享数据的方法声明为synchronized。即此方法为同步方法,能够保证当其中一个线程执行此方法时,
* 其他线程在外等待直至此线程执行完此方法。
*
* @author hasee
*
*/ //实现的方式
//加锁实现同步(同步代码块)
class Window1 implements Runnable {
int ticket = 100; Object obj = new Object(); public void run() {
while (true) {
synchronized (obj) {
if (ticket > 0) {
System.out.println(Thread.currentThread().getName() + ":" + ticket--);
} else {
break;
}
}
}
}
} //实现的方式(通过静态共享变量保证多个线程修改的是同一个变量)
class Window2 implements Runnable {
static int ticket = 100; public void run() {
while (true) {
if (ticket > 0) {
try {
Thread.currentThread().sleep(10); //将多线程的错误放大
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + ticket--);
} else {
break;
}
}
}
} //同步的方式(通过继承的方式来实现多线程)
class Window3 extends Thread {
static int ticket = 100;
static Object obj = new Object(); //静态的监视器,避免不同进程使用不同的监视器,造成无法同步的安全问题
public void run(){
while(true){
synchronized (obj) {
if(ticket > 0){
try {
Thread.currentThread().sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + ticket--);
}
} }
}
} //同步的方法(通过接口实现)
class Window4 implements Runnable {
int ticket = 100; //共享数据 public void run() {
while (true) {
show();
}
} //将该方法声明为synchronized方法
public synchronized void show(){
if (ticket > 0) {
try {
Thread.currentThread().sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + ticket--);
}
}
} public class TestWindow1 {
public static void main(String[] args) {
// 方式一:3个Thread共享一个Window1类对象
Window1 w = new Window1();
Thread t1 = new Thread(w);
Thread t2 = new Thread(w);
Thread t3 = new Thread(w);
t1.start();
t2.start();
t3.start(); // 方式二:三个Window2类对象,各自分别对应了3个Thread
// 这种方式必须保证共享的变量(即共享资源)为静态的,否则出错
// Window2 w21 = new Window2();
// Window2 w22 = new Window2();
// Window2 w23 = new Window2();
// Thread t21 = new Thread(w21);
// Thread t22 = new Thread(w22);
// Thread t23 = new Thread(w23);
// t21.start();
// t22.start();
// t23.start(); }
}

15 - 工具方法一般都声明为static方法

java points[复习]的更多相关文章

  1. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  2. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  3. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  4. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  5. Java基础复习笔记系列 四 数组

    Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...

  6. Java基础复习笔记基本排序算法

    Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...

  7. java异常复习

    如果有时学东西概念太多了,可以反着学,从结果到过程,从代码到概念,也许就不会那么枯燥了,比如学反射的时候. java异常复习 异常和错误的区别? 异常:程序或环境本身出现错误.(程序员可以捕获并处理) ...

  8. 《Java基础复习》-控制执行流程

    最近任务太多了,肝哭我了,boom 参考书目:Thinking in Java <Java基础复习>-控制执行流程 Java使用了C的所有流程控制语句 涉及关键字:if-else.whil ...

  9. 《Java基础复习》—常识与入门

    突然发现自己Java基础的底子不到位,复习! 所记知识会发布在CSDN与博客网站jirath.cn <Java基础复习>-常识与入门 一.Java语言的知识体系图 分为三部分 编程语言核心 ...

随机推荐

  1. linux常见故障处理

    目录 一. 文件和目录类 1.1 File exist 文件已经存在 1.2 No such file or directory 没有这个文件或目录(这个东西不存在) 1.3 command not ...

  2. vertx的ShardData共享数据

    数据类型 一共4种 synchronous shared maps (local) asynchronous maps (local or cluster-wide) asynchronous loc ...

  3. FreeRTOS 启动进程调度后,程序卡死的部分原因分析。

    现象:1,RTOS  使用时 系统卡启动文件               B       .处. 原因分析:该种情况是由于定义开启了中断,但是未开启中断处理服务.程序执行到中断响应式无对应的程序响应 ...

  4. Java Swing 编程 JComboBox 显示不全问题。

    最近在做Java Swing编程一个小例子.然后遇到JComboBox 宽度固定,而下拉列表比较长,导致显示不全的问题. 解决的思路想到两种,1:下拉列表当显示不全的时候,换行显示.2:在下拉列表停几 ...

  5. MyBatis insert/delete/update 的返回值

    insert,返回值是:新插入行的主键(primary key):需要包含<selectKey>语句,才会返回主键,否则返回值为null. <insert id="inse ...

  6. PyQt5目录

    记录下学习PyQt5的经过,方便以后查找. Offical website : https://www.riverbankcomputing.com QMainWindow : http://www. ...

  7. 基于docker/dockerfile实现redis主从复制

    今天我们来搭建基于docker实现redis主从复制集群 为什么要使用redis集群模式? Redis可以说是内存数据库,mysql的数据库是真实存储在硬盘里的,因此,redis的读取速度要比mysq ...

  8. 想不想在mac上玩PSP?我教你呀

    OpenEmu for mac是一款针对OS X系统的原生开源游戏模拟器.有了它可以在Mac OS X 系统上玩GB.GBA.NDS.psP.PlayStation.超级任天堂(SNES).红白机(N ...

  9. ES6---箭头函数()=>{} 与function的区别(转载)

    1.箭头函数与function定义函数的写法: //function function fn(a, b){ return a + b; } //arrow function var foo = (a, ...

  10. Mix 导航

    Mix 导航 一.程序员必备技能 Markdonw 使用 Git 常用命令 二.分析设计 UML 三.其他 博客园代码样式修改