新手上路 -- 02

在java中主要表示类所在的位置,用于区别同名类。

关键字:

  • package——用于class文件首行,申明所在包;
  • import——导包语句,便于使用类
    常用的包:java常用包
    注意:包名不能以java—源生包,javax—扩展包,org—第三方包

类是对象的抽象,对象是类的实现。

每一个class类代表一类对象的特征和行为,具体表现为类中的属性和方法,而每一个类的实现,可以通过构造方法对类的属性赋值和初始化。即一个类基本构成——构造方法、属性、方法,其中构造不写默认有个无参的。

  • Java是一门面向对象的语言。在java中有两个特殊的对象——this和super。
  • 特殊的类——抽象类(abstract class——extends)、接口(interface——implement)和内部类。

常玩的类

  • 祖宗类——Object——clone()【Cloneable】、equals()、hashCode()、getClass()、toString()…
  • 基本类型的包装类——Byte、Short、Intrger、Long、Double、Float、Character、Boolean——自动装箱、拆箱
  • 其他——String(final类)【每个字符串都是常量】/StringBuilder/StringBuffer、Pattern(“1$”从头到尾包含)【捕获组】、Math、Date/DateFormat(日期)–SimpleDateFormat、Calendar(日历)–GregorianCalendar
  • 异常——Throwable:
    异常族谱

面向对象

封装

面向对象的基础,把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。封装是一种信息隐藏技术。
实现——方法、属性私有化、内部类

继承

Java是单继承多实现,继承主要和向上造型相关,而实现一般是与规范相关。

多态

多态是指允许不同类的对象对同一消息做出不同的响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式。主要是为了解耦

多态主要针对对象的行为即方法,而不是对象的属性。主要包括:

  • 编译时多态——重载
  • 运行时多态——重写和向上造型

方法

定义格式 :

方法定义格式
如:main方法

修饰符:

权限修饰符:

本类子类同包类其他类
public可以可以可以
protected可以可以可以
默认可以同包子类可以不可以
private可以不可以不可以

其他修饰符:

名字英文修饰对象重点
静态static代码、属性、方法、类与类同级
最终final属性、方法、类不可改变
抽象abstract方法、类等着被重写

重写、重载、递归

  • 方法重写需要遵循“两等两小一大”
  • 方法重载是同一个类中只有参数列表不同的多个方法
  • 方法递归指方法内部逻辑调用了方法本身

方法传参

  • 方法传入的参数是基本类型,则传入的是拷贝值,怎么改变与原变量无关;
  • 方法传入的参数是引用类型,则传入的是地址,如果方法内部通过原有地址改变了参数的属性,则原参数也改变。

不懂就画图,栈、堆、方法区

集合框架 – Collection

集合框架:包括集合、数组、映射和操作它们的工具类。
主要API有增删改查、获取迭代器iterator()、判断equals(Object o)、转换如toArray()等。下面的几个都是接口规范了几个大类,具体实现看实现类。

List

元素有序,容量可变,但是内存是否连续看实现类。对于扩容,除了ArrayList基于原容量右移1位,即0.5倍加1,其他都是默认为原容量的一倍。

  • LinkedKist
  • ArrayList
  • Vector/Stack
    向量是线程安全的最早集合,初始容量为10;
    栈是继承Vector的,先进先出或者后进先出(LIFO)。

Queue

队列遵循先进先出的原则。

Set

主要特点元素不重复且无序;可以使元素有序,实现Comparator接口或者其他方法。添加重复元素是保留原有的元素(可以通过“a”和new String(“a”)对比验证)。

Map

基础单元是Entry,存储的是键值对模式。无序且键不重复,重复键录入新值会覆盖后值;一般都是通过增强for循环遍历for(String key : keys){}。

  • HashMap
  • HashTable – 线程安全
    – Properties映射:继承了HashTable;key和value都只能是String,而且是可以持久化。和我们常用的配置文件相关——必须存储在”.properties”文件中。
  • ConcurrentMap —— java_util_concurrent
    map关于null值

Comparator

一个接口,主要包括compareTo(T o1,T o2)equals(object obj)两个方法
重写compare方法,将比较规则写到compare方法中—根据返回值的正负来确定大小;如果返回值是正数,表示第一个参数排到第二个参数之后;反之表示第一个参数排到第二个参数之前。
如果没有指定排序规则,这个时候要求集合中的元素对应的类必须实现Comparable,比较规则是写在compareTo方法中。

Collections–工具类

是一个操作集合的工具类,提供一系列的操作集合的静态方法。Collections的构造方法都是私有的,只能通过本类对象或者类名+“.”调用。
collections工具类

线程

运行一个程序或一串代码就是开启一个进程,而一个进程最少包含了一个线程。而线程多了会形成资源争抢,即线程安全问题。

创建方式

  • 继承线程的顶级父类——Thread
  • 实现Runnable接口
    两种方法本质都是重写run方法
  • 实现callable接口【java.util.concurrent】——重写call方法

启动

我们知道要把执行的任务逻辑放到run方法中,调用start方法可以开启线程,现在在main方法中使用start方法来启动线程和直接调用run方法有什么区别?

  • run()相当于线程的任务处理逻辑的入口方法,它由Java虚拟机在运行相应线程时直接调用,而不是由应用代码进行调用。
    相应的调用t.run(),只是调用一个实例的方法而已,并未启动线程,因此run()会被立即执行。
  • start()的作用是启动相应的线程。启动一个线程实际是请求Java虚拟机运行相应的线程,而这个线程何时能够运行是由线程调度器决定的。
    start()调用结束并不表示相应线程已经开始运行,这个线程可能稍后运行,也可能永远也不会运行。

线程状态

https://www.cnblogs.com/reality-soul/p/7871786.html 线程状态变换
new、start、wait/sleep、notify

多线程的并发安全问题

线程执行顺序:线程的执行不存在先后,相互抢占执行的;
抢占并不是在发生在线程执行的开始,而是发生在线程执行的每一步过程中。
  • 关于守护线程的问题,t.setDeamon(ture);优先级问题,1-10越大优先级越高。
    线程并发问题
    说明:现在有小红和小绿两条线程,两条线程同时到大while循环,满足条件进入循环后,两条线程拿到的值都是100,进行减1操作后,值都为99,接着两条线程去执行,输出语句,所以就会产生打印数字重复。

线程安全方法

  • 原子性 —— atomic原子操作/synchronized同步机制/CAS无锁机制
  • 可见性 —— volatile、synchronized
  • 有序性 —— 线程池+阻塞队列

反射

通过类或对象解剖类属性和方法,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
通过反射可以获取的解剖类:Class类的类、Field属性的类、Method方法的类、Constructor构造方法的类、Package 代表包的类、Annotation 代表注解的类。
反射功能

作用

反射主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。
反射提供封装程序集、模块和类型对象。
反射其实是解剖类,分析类的字节码。产生类所对应的实例对象。

实现解耦操作,便于模块化开发。

应用

  • Object类的clone()方法
  • 在这里插入图片描述

其他01——泛型<>

DK1.5特性之一。泛型使得代码可以适应多种类型。像容器,List< T >,大量使用了泛型,它的主要目的之一就是用来指定容器要持有什么类型的对象。

  • 泛型的上限: <? extends 类/接口>
  • 泛型的下限: <? super 类/接口>

☆泛型的擦除☆

用具体类型来替换泛型的过程叫泛型的擦除;发生在编译期,即定义是进行了泛型的擦除,后面对元素的操作需要满足具体类型。

总览:https://www.cnblogs.com/justinli/p/generic.html

其他02——迭代器Iterable

如果一个对象允许用增强for循环来遍历,那么这个对象对应的类必须实现Iterable 接口,增强for(foreach)循环本质上就是在进行迭代遍历。增强for循环不允许对原集合进行增删操作。
主要实现就是Iterator:

	    // 获取迭代器对象
		Iterator<String> it = set.iterator();
		// 判断是否有下一个元素
		while (it.hasNext()) {
			// 挪动指针,获取元素
			String s = it.next();
			System.out.println(s);
			// 表示移除在迭代的元素
			// it.remove();}
			// 在迭代过程中不允许对原集合进行增删操作
			// set.remove(s);		//报错

其他03——注解

  • 注解:给机器看的解释说明
  • 注释:给编程人员看的解释说明

Annotation(注解)概述

从JDK5.0开始, Java增加了对元数据(MetaData)的支持,也就是 Annotation(注解)。 Annotation其实就是代码里的特殊标记,它用于替代配置文件,也就是说,传统方式通过配置文件告诉类如何运行,有了注解技术后,开发人员可以通过注解告诉类如何运行。在Java技术里注解的典型应用是:可以通过反射技术去得到类里面的注解,以决定怎么去运行类。

掌握注解技术的要点:

  • 如何定义注解。
  • 如何反射注解,并根据反射的注解信息,决定如何去运行类。
定义
  1. 定义注解的类用@interface修饰;
  2. 属性默认被public stataic final修饰,方式如:int i();
    a) 属性类型只能是基本类型、String、枚举、Class字节码、注解以及他们的一位数组形式;
    例如
  1. @Override — 标记方法重写
  2. @SuppressWarnings — 压制警告

a)“unchecked” — 泛型的强转
b)“rawtypes” — 需要泛型但是没有指定
c)“unused” — 定义了没有使用的变量
d) “deprecation” — 已过时,
e)“static-access” — 表示通过对象调用了

  1. 静态属性或者静态方法
    a)“null” — 表示可能通过值为null的对象调用了属性或者方法
  2. @Deprecated — 已过时 元注解 — 对注解进行限制的注解 @Target — 限定注解的使用范围 
    @Retention — 限定注解的生命周期 
    @Documented — 表示让当前注解生成到文档中 
    @Inherited
    — 表示允许当前注解也限制子类 — 注解一般只限制当前的类而不限制子类

注解的反射

在这里插入图片描述


  1. c ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值