java 学习日志 (IDEA)7.12

java 学习日志 (IDEA)7.12

下载所需环境变量 jdk安装包
oracle官网jdk下载

https://www.oracle.com/java/technologies/downloads/archive/

Java SE 8 (8u211 and later)
配置系统环境变量 PATH里必须 添加jdk根目录下的bin和jre\bin 否则无法使用
CLASSPATH 环境变量 是java的类库
配置完成后 使用cmd运行 java -version javac 查看是否安装成功

Linux环境下
下载jdk安装包gz
配置环境变量文件 /etc/profile
最后一行添加

JAVA_HOME=/usr/java/jdk1.8.0_331
CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME

JDK :java Development kit

JRE :java runtime environment`

JVM:java virual machine

JDK:java开发者工具

JRE:java运行环境

JVM:java虚拟机

jdk包含jre jre运行jvm

jvm:内存管理 可跨平台 安全

JMM:java内存模型。jmm是一种抽象的概念,并不真实存在,它描述的是一种规范,通过这种规范定义了程序中的各个变量的访问形式。

编译型:

编译整个文件,使计算机可执行,程序

解释型:

实时编译,写一句编译一句,网页

java、javac 编译 运行

javaoc 生成文档

jar:打包应用

java在计算机把java文件转化为java字节码class文件,jre提供Java类

java虚拟机采用基于栈的架构,操作码和操作数组成,这些字节码指令叫opcode

运行class文件时相当于启动了一个jvm进程,jvm会翻译这些字节码转化为机器码,他有两种执行方式,一种是解释执行,将opcode+操作数编译成机器代码;另一种是jit,即时编译,在一定条件下将字节码编译成机器码后在执行

java文件->java编译器->class文件->类装载器->字节码校验器->解码器->系统平台

规范

文件名和类名保持一致

方法名和变量名使用驼峰命名法

类名首字母大写

常量大写加下划线

避免使用中文或拼音命名

包机制

域名倒写

防止命名冲突

package

import


JSE 、JEE 、JME区别

JSE:java standard edition 标准版

JEE:java enterprise edition 企业版

JME:java mirco edition 移动版

spring 是 JEE轻量级替代品

spring boot是spring+自动化配置

IDEA

破解链接:jetbrains全家桶系列产品免费激活教程和方法 | ide激活网 (idejihuo.com)

IDE:集成开发环境,提供程序开发环境

忽略大小写提示IDEA默认严格区分大小写提示

File->settings->editor->General->code completion

case sensitive completion


Maven

Maven:项目管理工具

Maven – Download Apache Maven [1]

配置conf文件下setting.xml文件

1.设置repo本地仓库地址

D:\Maven\repository

2.设置镜像仓库

<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<mirror>
<id>ibiblio</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
</mirror>
<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>

阿里云maven镜像仓库

maven setting.xml 中文配置详解(全配置)_mildness丶的博客-CSDN博客_maven setting.xml配置

3.设置IDEA maven配置

file->setting->build,execution,depleyment->Bulid Tools->Maven

Maven home path 设置为maven的解压目录

项目添加module-> bild system选择Maven


JAVA语法

Oracle 官网在线 JDK1.8 文档

       /**
        * 文档注释
        * @author 作者名
        * @version 版本号
        * @since 知名需要的最早使用的jdk版本
        * @param 参数名
        * @retrun 返回参数情况
        * @throws 异常抛出情况
        */
main程序入口 public static void main(String[] args) {}

变量

byte 字节 、short 短整数 、int 整数、long 长整数、float 单浮点、double 浮点数、boolean 布尔值、char 字符、String 字符串

运算符

%余 ||或 &与 !非 |并 ^异或 短路运算&& ||

<< 位移

输入输出

字节流(基础类):Outputstream、Inputstream

字符流(基础类):Reader、Write

处理流:Bufferinputstream、Bufferoutputstream、bufferRead、bufferwrite、

DatainputStream、Dataoutputstream

转换流(字节流转换字符流):Inputstreamreader、Outputstreamwrite

过滤: Filter

文件:File

打印流:PrintStream、PrintWriter

输入流:把数据从其他设备读到内存中

输出流:把数据从内存中读到其他设备

字节流:以字节为单位,适合读取音频,视频、二进制等文件

字符流:以字符为单位 ,适合读取文本文件

序列化<-->反序列化 serializable 前提需要继承接口

transient (透明的)某个关键字不需要序列化则使用

System.out.println(); [2]

判断

if(boolean){}else{}

switch(value){case value: ;case value: ;}

循环

for(int i;boolean;i++){} [3]

while(boolean){}

do{}while(boolean);

int list[]={0,1,2,3,4,5,6,7};
        for(int x:list) {
            System.out.println(x);
        }

Java练习

//        int a = 0;
//        int b = 0;
//        Scanner sc = new Scanner(System.in);
//        a = sc.nextInt();
//        b = sc.nextInt();
//        System.out.println(a + b);
//        System.out.printf("a+b=%d\n", a + b);

//        int year = sc.nextInt();
//        if (year % 100 == 0) {
//            if (year % 400 == 0) {
//                System.out.printf("%d是闰年\n", year);
//            } else {
//                System.out.printf("%d\n不是闰年", year);
//
//            }
//        }else{
//            if(year%4==0){
//                System.out.printf("%d是闰年\n", year);}
//            else {System.out.printf("%d\n不是闰年",year);}}

//       int list[]={0,1,2,3,4,5,6,7};
//                for(int x:list) {
//                    System.out.println(x);
//                }
//        }

//        Integer []a={5,3,6,4,2,1};
//        Arrays.sort(a,((x,y)->y-x)); //自定义函数传入两个变量比较方式,x-y返回负数x<y否则x>y 需要int对象
//        System.out.println(Arrays.deepToString(a));

        //判断二维数组某一行的平均值或者求和
//        Scanner sc=new Scanner(System.in);
//        int l=sc.nextInt();
//        String op= sc.next();
//        double [][] w=new double[12][12];
//        for(int i=0; i<12;i++) {
//            for (int j = 0; j < 12; j++) {
//                w[i][j] = sc.nextDouble();
//            }
//        }
//                double sum=-0;
//                for(int i=0;i<12;i++)
//                    sum+=w[l][i];
//                    if("M".equals(op)) //==判断地址相同,equals判断字符相同
//                        System.out.printf("%.1f",sum/=12);
//                        System.out.printf("%.1f",sum);

//        String str= String.format("age is %d",18);
//        double pi= Double.parseDouble("3.1415926"); //字符串转换
//        for (int i = 0; i < str.length(); i++) {
//            System.out.print(str.charAt(i));//只能读取不能写入 相当于str[i]
//        }
//        System.out.println();
//        System.out.println(pi);

        //String 不能被修改如果修改会创建新的字符串而不是引用
        //StringBUilder  线程不安全(无锁),速度快
        //StringBuffer  线程安全,速度慢
        //StringBUilder 和StringBuffer 会在自己的基础上添加和修改
        //可以使用 setCharAt 修改字符串 append添加字符
    
        //容器:继承父类Collection List 接口 ArrayList 容器类  Stack 容器 LinkedList 容器类
        //Set 接口 HashSet 容器类 TreeSet 容器类
        //  Map 接口 HashMap 容器类 TreeMap 容器类
        //Iterator迭代器接口  Collections 工具类

(缺少JAR包依赖可在此下载)Download JAR files with all dependencies (jar-download.com)

稀疏数组:二维数组中只记录有效数值,记录到一个小数组中从而减少存储空间

面向对象

1.以类的方式组织代码,以对象的方式封装数据

封装 继承 多态

class classname{
	int number=0;//类变量
  classname(){
  //构造函数
  }
}

在new对象时会在栈区创建一个引用的变量类名指向堆区创建的空间地址

1.类与对象:类是一个模板,抽象,对象是一个具体的实例

2.方法:定义、调用

3.对应引用:8个基本类型

4.属性:字段、成员变量,默认初始化

修饰符 属性类型 属性名=属性值

5.对象创建使用:必须使用new 、

6.类:静态的属性、动态的方法

封装

高内聚,低耦合

隐藏内部数据,只利用接口修改内部数据不允许其他方式修改内部内容。提高程序的安全性,保护数据,隐藏实现细节,统一接口,系统可维护性

属性私有,get/set

继承

extands 子类继承父类

继承是对某一批类的抽象,从而实现对现实世界更好的建模

java只有单继承,没有多继承

object类

super 指向父类

this 指向当前类

方法重写

继承是is-a 继承关系。关系具有传递性,不具有对称性,声明时确定关系

组合是has-a 包含和整体关系,用以描述一个类由多个部件类构成,uses-a,依赖关系,一个类部分使用另一个类,运行时确定关系

继承与组合都是面向对象中代码复用的方式。父类的内部细节对子类可见,其代码属于白盒式的复用,而组合中,对象之间的内部细节不可见,其代码属于黑盒式复用。继承在编码过程中就要指定具体的父类,其关系在编译期就确定,而组合的关系一般在运行时确定。继承强调的是is-a的关系,而组合强调的是has-a的关系。

只能在当前类和子类中访问的成员设置为protected 保护修饰符

抽象类

抽象类关键字 abstract

1.不能new抽象类,只能靠子类去实现它

2.抽象类可以写普通方法

3.抽象类方法必须在抽象类中

5.类继承抽象类 关键字extends

6.抽象类由构造方法

7.抽象单继承

因为各个子类需要实现方法会有不同,所以需要一个抽象类作为模板

抽象类可以提高开发效率,扩展性高

接口类

接口关键字 interface

1.接口中的所有定义都是public的抽象方法

2.类实现接口需要关键字implements

3.接口类中不能写普通方法

  1. 接口的属性都是常量
  2. 接口没有构造方法

6.接口多继承(继承其他接口类)

实现了接口的类就需要重写所有接口方法

内部类

类里面写类

实例化内部类需要先实现外部类

一个java文件能有多个class类,但只能由一个public类

成员内部类 内部类可以访问外部类的私有属性

静态内部类 内部类是一个静态类

局部内部类 在方法中写内部类

匿名内部类 内部类不存入变量中

多态

多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。

1.要有继承

2.要有重写 (重载是名字相同参数列表不同)

3.父类引用指向子类对象

异常机制

检查性异常:编译时发生的异常

运行时异常:运行时发生的异常

Error 异常:jvm虚拟机异常、AWT异常(GUI)

Exception:运行时异常:下标越界、空指针、算术异常、丢失资源、找不到类异常,IO异常

抛出异常

throw new Exception(); 主动抛出异常 为了发现和处理异常

throws Exception //方法上使用

捕获异常

try{

//监测代码

}catch(Exception e){
//出异常执行 
e.printStackTrace //打印错误栈信息
}finally{
//无论是否报错都运行,比如关闭资源

}

自定义异常类

需要继承异常类

方法中使用 throw 抛出异常

使用方法时去捕获异常

多进程、线程

进程和线程,一个进程可以有多个子线程

Thread :start0 本地方法java无权限 由c处理

Runnable :函数式接口 lambda ()->{方法体}

Callable :可以有返回值

静态代理 :new Thread([^Runnable] ()->{}).start();

Lambda表达式 :函数式编程,避免内部类过多

线程状态:新建、就绪、运行、阻塞、死亡

方法:

run 线程入口点

sleep 指定时间内让当前执行线程暂停,也不释放锁

wait 会释放锁并等待notify方法唤醒

join 等待线程对象终止

yield 会让线程回到就绪状态等待执行

isAlive 查看线程是否完成

start 通过调用run()方法启动一个线程

setpriority 设置线程的优先级

interrupt 中断线程

  • a: 是否是多线程环境

  • b: 是否存在共享数据

  • c: 是否存在多条语句同时操作共享数据

线程同步(锁)多个对象操作同一个资源,并发问题,会导致线程不安全所以需要加锁(队列+锁)

synchronized 同步方法(占用资源)、同步代码块

当线程对资源操作时会拿到锁、其他线程等待锁释放

死锁:互斥(一个资源不能被两个线程使用)请求与保持(线程不能因为资源阻塞而不释放锁)不剥夺推荐(线程获得了资源在没有使用结束不能被其他线程占用)循环等待条件(没有队列)

Lock (JUC)ReentrontLock lock trylock unlock (优先级高)

线程通信: 缓存区:消息队列 标志位

wait();等待 notifyAll();唤醒

线程池(POOL) 池化技术、设置池大小、连接时间、保持时间、超时时间、阻塞队列、线程工厂、拒绝策略

网络编程

  • ip

  • 端口

  • socket编程

  • Tcp三次握手、四次挥手、面向连接

  • UDP 无连接、Packet 发送

  • URL

GUI

  • AWT

    1. Frame
    2. 监听事件 鼠标 键盘 窗口文本框 动作事件
  • swing

    1. 文本框
    2. 标签
    3. 按钮
    4. 文本框
    5. 面板
    6. 布局方式
    7. 关闭窗口
    8. 列表

注解与反射

注解

  • 元注解
  • 内置注解
  • 自定义注解
  • 反射读取注解

反射

  • Class

    • Class.forName()

    • newinstance()

  • 类加载机制

  • Method

    • invoke()
    • 存在重载,获取需要写参数类型
  • Field

    • set()
  • Consstruct

    • newinstance()
    • 获取需要传递class类型
  • 破坏私有关键字 setAccessible(true)

  • 性能分析

    • 正常>检测关闭的反射>默认的反射
  • 反射获得的注解,泛型

开发规范

阿里技术精华干货整理-阿里云开发者社区 (aliyun.com)

23种设计模式

单例设计模式

public class Only {
    private static volatile Only on; //volatile 保证可见性 有序性 不保证原子性
    private Only(){}
     public static Only getclass(){
        if(on==null){
            on=new Only();
        }
        return on;
     }
}

快捷键

ctrl+/ 快速注释

shift+F10 编译运行

alt+ins 快速插入各种函数

ctrl+alt+T 快捷使用功能代码块包裹代码


  1. apache公司的所有项目都可以通过像maven.apache.org或tomcat.apache.org这种形式直接访问 ↩︎

  2. 输入sout编译器自动编写 ↩︎

  3. 输入fori编译器自动编写 ↩︎

posted @ 2022-07-24 12:13  RuiZiY  阅读(75)  评论(0编辑  收藏  举报