Java及Java SE学习笔记

前言

主要用于记录学习过程中的一些笔记。

了解

JavaEE是指Java Enterprise Edition,Java企业版,多用于企业级开发,包括web开发等等,也叫J2EE

JavaSE通常是指Java Standard Edition,Java标准版,就是一般Java程序的开发就可以(如桌面程序),可以看作是JavaEE的子集

java是一门程序设计语言,而JavaSe只是一个使用java进行编程的规范、框架,它不是一门编程语言。JavaSe(java standard edition),
一般包括jdk、jre以及各种API文档等:

javaEE 号称有十三种核心技术。它们分别是:JDBC、JNDI、EJB、RMI、Servlet、JSP、XML、JMS、Java IDL、JTS、JTA、JavaMail和JAF

JDK、JRE、JVM

JDK : Java Development Kit
JRE : Java Runtime Environment
JVM : JAVA Virtual Machine

JDK包含JRE
JRE包含JVM

生成文档注释

javadoc -encoding UTF-8 -charset UTF-8 Hello.java

idea快捷键

sout =System.out.println();
psvm=public static void main(String[] args) {
}
fori :快速生成初始值i=0的for循环

快速新建对象:new Student() 后面 Alt+Enter

快速输出test : test.sout=System.out.println(test);

快速生成捕获异常:ctrl+alt+T

alt +insert : 自动生成构造函数

Ctrl+D //复制当前行到下一行

alt复制:复制竖下来的一列

文档注释: /**+回车

数据类型

byte占1个字节范围: -128-127
short占2个字节范围:-32768-32767

位(bit) :是计算机内部数据储存的最小单位,11001100是-个八位二进制数

字节(byte) :是计算机中数据处理的基本单位,习惯上用大写B来表示

1B (byte,字节) = 8bit (位)

1bit表示1位,
1Byte表示一个字节1B=8b
1024B=1KB
1024KB= 1 M
1024M=1G

**最好完全避免使用浮点数进行比较
float 接近但不等于 有舍入误差
**
如果我们需要精确计算的结果,则必须使用BigDecimal类来操作

数据类型等级

低->高 自然转换
高->低 需要强制转换

例如

char c='a';
int d=c+1;
system.out.println(d) //输出为98(不需要强制转换)
system.out.println((char)d) //输出为b (需要强制转换)

转换的时候可能存在内存溢出或精度问题

变量

类变量:也叫做静态变量。static int a=0; 必须初始化和声明,写在方法外,类里面
他是在类里面定义的,所有方法都能访问的变量,类似于全局变量。使用static 修饰的就是类方法(也叫静态方法)静态方法是属于整个类的。

局部变量:写在方法里的
实例变量:写在方法外,类里面,从属于类(必须new才能使用)

命名规范

类成员变量:首字母小写和驼峰原则: monthSalary除了第一个单词以外,后面的单词首字母大写
局部变量:首字母小写和驼峰原则
常量:大写字母和下划线: MAX _VALUE
类名:首字母大写和驼峰原则: Man, GoodMan
方法名:首字母小写和驼峰原则: run(), runRun()

操作数++与–

例如 int a=3,d=2;
int b=a++; //a先赋值再加1 (b=3,a=4)
int c=++d; //d先加1再赋值(d=3,c=3)

包机制

一般利用公司域名倒置作为包名; www.baidu.com com.baidu.www

Scanner对象

Scanner scanner=new Scanner(System.in); 创建输入对象

判断是否还有下一个数
scanner.hasNextInt()
一般常用于while(scanner.hasNextInt())循环判断

接受用户输入
String str3=scanner.nextLine(); //nextLine以Enter为结束符
String str=scanner.next(); // next()不能得到有空格的字符串,自动去掉字符之前的空白

例题
打印三角型五行

  for (int i = 1; i <= 5; i++) {for(int j=5;j>=i;j--){System.out.print(" ");}for(int j=1;j<=i;j++){System.out.print("*");}for(int j=1;j<i;j++){System.out.print("*");}System.out.println();}

值传递和引用传递

java都是值传递

方法的重载

在一个类中,函数名可以相同,但形参不同
规则:
方法名必须相同。
参数列表必须不同(个数不同,或类型不同、参数排列顺序不同)

可变参数

 public void test(int... i) {System.out.println(i[1]);}

传进去的本质是数组
必须在最后面

数组

动态初始化
声明数组并创建数组赋予空间

 int[] nums=new int[10];  //定义数组

int[] array=null (放在java中的栈中)
array=new int[10] (放在java的堆中)

静态初始化
int [] a={1,2,3,4,5}

数组对象本身是在堆中的
数组也是对象,数组元素相当于对象的成员变量

冒泡排序

时间复杂度为O(n2)

public static int[] sort_maopao(int [] array){int temp=0;for (int i = 0; i <array.length-1 ; i++) {     //两两比较次数比数组中的元素少一//内层循环交换数字for (int j = 0; j <array.length-1-i ; j++) {if(array[j+1]>array[j]){            //if里面是+1 所以循环中要-1保证不溢出 如果符号为< 则从小到大排temp=array[j];array[j]=array[j+1];array[j+1]=temp;}}}return array;}

面向对象

本质:以类的方式组织代码,以对象的组织(封装)数据
三大特性:封装,继承,多态
总结:对象是通过引用来操作的:栈–>堆 (真实地址在堆中)

封装

我们程序设计要追求“高内聚,低耦合" 。
高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;
低耦合:仅暴露少量的方法给外部使用。

继承

如果父类被final修饰,则子类不能继承此类

super

调用父类的构造方法,必须在构造方法的第一个
只能出现在子类的方法或构造方法中
super 和 this 不能同时调用构造方法
与 this比较:

  1. 代表对象不同:
    this: 本身调用者这个对象
    super: 代表父类对象的引用
  2. 前提:
    this: 没有继承也可以用
    super: 只有在继承条件在可以使用
  3. 调用构造方法:
    this: 调用本类的构造方法
    super: 调用父类的构造方法

重写

需要有继承关系,子类重写父类的方法
1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围可以扩大但不能缩小(public>protected>private)子类方法为public父类方法为private
4.抛出的异常范围可以被缩小但不能扩大(父类异常为Exception子类异常为ClassNotFoundException)
5.返回的参数类型必须相同

不能重写的方法
1.static 方法,属于类,不属于实例
2.final 常量
3.private 方法

为什么需要重写:
1.父类的东西子类不一定需要

多态

多态是在重写的基础上
即同一方法可以根据发送对象的不同而采用多种不同的行为方式。让程序变得更灵活
存在条件
1.有继承关系
2.子类重写父类方法
3.父类引用指向子类对象(Person person =new Student())

匿名代码块与静态代码块

    {  //跟对象同时产生,在构造方法之前执行System.out.println("匿名代码块");}static {  //跟程序同时产生//最先执行,只执行一次System.out.println("静态代码块");}

抽象类

abstract定义抽象类

1.抽象类中可以写普通方法,但抽象方法一定要写在抽象类中。
2.不能new这个抽象类,只能靠子类去实现它。
3.在抽象类中是可以使用构造函数的

接口

接口中所有定义都是抽象的public
作用:
1.作为约束
2.定义一些方法,让不同的人实现
3.implements可以实现多个接口
4.实现了接口的类,必须重写接口中的方法

内部类

1.成员内部类
2.局部内部类(在方法里定义的类)
3.静态内部类
4.匿名内部类(重点)–详情参见多线程笔记。

HashMap数据结构

JDK1.7:数组+链表
JDK1.8:hash表=数组+链表+红黑树

那为什么要在链表长度大于等于8的时候费成红黑树呢?
如果链表的长度没有达到这个长度的话,因为红黑树它自身的这种维护,插入的这种维护的开销也是非常大的,因为每次一去插入一个元素的时候很有可能会破坏掉他的平衡。也就是说hashmap的put操作非常多的时候,可能会影响插入的性能。

为什么数组的长度必须是2的指数次幂?
HashMap为了实现存取高效,要尽量减少碰撞,就是要尽量做到:把数据分配均匀,

负载因子为什么是0.75?
当负载因子不定为0.75的时候(两种情况)
当负载因子定为1时:结论:所以当加载因子比较大的时候:节省空间资源,耗费时间资源
当负载因子定为0.5时:结论:所以当加载因子比较小的时候:节省时间资源,耗费空间资源
但是我们设计程序的时候肯定是会在空间以及时间.上做平衡,所以就选择了0.75这个中间值值,

异常机制

throws用在方法上
throw new Exception(); 用在方法内
异常总接口:Throwable
JVM错误
StackOverFlow (栈溢出)
OutOfMenory(java内存溢出,不断创建新对象)

自定义异常:继承Exception类即可

常用类

包装类:
自动装箱和拆箱(针对八大基本类型做出的类)包装类均位于java.lang包
在进行基本数据类型和对应的包装类转换时,系统将自动进行。
自动装箱:将 基本数据类型 封装为对象类型,来符合java的面向对象的思想。
自动拆箱:将对象重新转化为基本数据类型。

//包装类测试
//缓存值范围 int:-128~127
public class Test1 {public static void main(String[] args) {Integer num1 = 200;Integer num2 = 200;System.out.println("num1==num2: "+(num1==num2));  //IntegerCache 不存在此对象,将创建新对象,所以不相等//相当于编译器执行了Integer num1 = Integer.valueOf(200)操作。// 这个方法就是返回一个 Integer 对象,只是在返回之前,看作了一个判断,// 判断当前 i 的值是否在 [-128,127] 区别,且 IntegerCache 中是否存在此对象,// 如果存在,则直接返回引用,否则,创建一个新的对象Integer num3 = 100;Integer num4 = 100;System.out.println("num3==num4: "+(num3==num4));  //IntegerCache 存在此对象,返回引用 所以相等}
}

总览:

集合框架

HashMap原理:
详情请见
https://jingyan.baidu.com/article/ceb9fb10157a18ccac2ba05b.html

IO流

1.Java中Int与Integer的区别?

一、int 是基本类型,直接存数值;而integer引用数据类型。
二、Int的声明不需要实例化,且变量声明后的初始值为0;Integer的是一个类,初始值为null,需要进行实例化,才能对变量数据进行处理。
三、Integer类是int的包装类,实际开发中Integer被看成一个对象,可以进行数据转换等操作。

2.明确equal方法与==的区别

List item equals() 比较的是**两个对象的值(内容)是否相同。
List item “==” 比较的是
两个对象的引用(内存地址)**是否相同,也用来比较两个基本数据类型的变量值是否相等。

3.native、volatile关键字

native关键字:
是与C++联合开发的时候用的!java自己开发不用的!一 个native方法就是一个Java调用非Java代码的接口。一个native方法是指该方法的实现由非Java语言实现,比如用C或C++实现.

volatile关键字:
保证了变量的可见性(visibility)。被volatile关键字修饰的变量,如果值发生了变更,其他线程立马可见,避免出现脏读的现象。就是说线程能够自动发现 volatile 变量的最新值。

4.Set集合和List集合区别

它们有一个功共同的父接口,叫 Collection。
区别:
1:Set 里面不允许有重复的元素,所谓重复,即不能有两个相等(注意,不是仅仅是相同)的对象,List 以特定次序来持有元素,可有重复元素。
2: List 表示有先后顺序的集合,注意,不是那种按年龄、按大小、按价格之类的排序。当我们多次调用 add(Obj e)方法时

总结:List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。另外:在set集合中,hashset 集合比较两个对象是否相等,首先看hashcode 方法是否相等,然后看 equals 方法是否相等。new 两个 Student 插入到 HashSet中,看 HashSet 的 size,实现 hashcode 和 equals 方法后再看 size。

5.单例模式、工厂模式、代理模式、装饰模式

设计模式使人们可以更加简单方便的复用成功的设计和体系结构
工厂模式
模式中的角色和职责
工厂(Factory)角色:简单工厂模式的核心,它负责实现创建所有实例
的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。 
 抽象产品(AbstractProduct)角色:简单工厂模式所创建的所有对象的
父类,它负责描述所有实例所共有的公共接口。 
 具体产品(Concrete  Product)角色:简单工厂模式所创建的具体实例
对象。
优点:

  1. 实现了对象创建和使用的分离。
  2. 不需要记住具体类名,记住参数即可,减少使用者记忆量。

缺点:
4. 对工厂类职责过重,一旦不能工作,系统受到影响。
5. 增加系统中类的个数,复杂度和理解度增加

单例模式
保证一个类在内存中的对象唯一性。
1,不允许其他程序用new创建该类对象。
2,在该类创建一个本类实例。
3,对外提供一个方法让其他程序可以获取该对象。
好处:
对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销
由于new操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻GC压力,缩短GC停顿时间

装饰模式

  • 对一组对象的功能进行增强时,就可以使用该模式进行问题的解决,是一种对象结构型模式。装饰和继承都能实现一样的特点:进行功能的扩展增强。 但是只为提高功能,进行的继承,会导致继承体系越来越臃肿,不够灵活
  • 与继承关系相比,关联关系的主要优势在于不会破坏类的封装性,而且继承是一种耦合度较大的静态关系,无法在程序运行时动态扩展。在软件开发阶段,关联关系虽然不会比继承关系减少编码量,但是到了软件维护阶段,由于关联关系使系统耦合性不高,因此使得系统更加容易维护。当然,关联关系的缺点是比继承关系要创建更多的对象。

大三Java SE基础学习笔记相关推荐

  1. Java SE基础学习笔记1·基础

    文章目录 Java 特点 Java语言跨平台原理 JRE 和 JDK JDK的下载和安装 常用DOS命令 配置Path环境变量 Java程序开发运行流程 基础语法 注释 关键字 标识符 小驼峰命名法: ...

  2. Java SE基础学习笔记2·面向对象

    文章目录 对象 和 类 面向对象 类 类的定义步骤 对象 对象的使用 定义数组对象数组 对象内存图 单个对象 多个对象 多个对象指向相同 成员变量和局部变量 封装 private 关键字 被其他类使用 ...

  3. 【Java】Java零基础学习笔记

    文章目录 前言 思维导图 前期准备 卸载JDK 安装JDK Hello,world 可能遇到情况 java程序运行机制 IDEA的安装 java基础部分 基础语法 运算符 包机制 javaDoc文档手 ...

  4. (Java零基础学习笔记)第二章 Java中的基本语法

    前言: 大家好! 我是BA unravel .如果你想和我一起学习JAVA,欢迎大家一起来学习这个世界上最好的语言! 学习目标: 一周掌握 Java 入门知识 学习内容: 1. 搭建 Java 开发环 ...

  5. 夜光:Java语言基础学习笔记(三)在校资源

    夜光序言: 青青子衿,悠悠我心. 纵我不往,子宁不嗣音? 青青子佩,悠悠我思. 纵我不往,子宁不来? 挑兮达兮,在城阙兮. 一日不见,如三月兮. 正文:流程控制语句 结构化程序的三种结构 顺序结构 选 ...

  6. Java web基础学习笔记

    1.xml概述 1.1xml:xml一种数据存储格式,这种数据存储格式在存储数据内容的同时,还能够保存数据之间的关系 1.2xml保存数据的方法:xml利用标签来保存数据的内容,利用标签之间的嵌套关系 ...

  7. Java面向对象基础学习笔记(构造、重载、继承、多态、抽象类、接口、模块)

    Java面向对象编程包含哪些内容? 怎么理解面向对象编程? 现实生活中,我们定义了"人"的抽象概念,这就是类class,生活中的每一个具体的人就是实例instance. class ...

  8. Java SE 小白学习笔记 周周测 从小白到大牛

    周测01 一:填空题,每空1分,共20分 1:java的基本数据类型有(int)(byte)(short)(long)(double)(float)(Boolean)(char)2:请写出你接触过的关 ...

  9. Java语言基础学习笔记——基础语法

    一.标识符 1:取名必须以_,$或者字母开头 2:变量必须先声明,赋值后才能使用 3:内存管理 4部分:1) code segment 存放代码                             ...

最新文章

  1. 《题目与解读》红书 训练笔记目录《ACM国际大学生程序设计竞赛题目与解读》
  2. 大佬带你深入浅出Lua虚拟机
  3. 无法链接到SQL Server远程服务器的解决
  4. android qq分享自动弹出,史上最详细Android集成QQ,微信,微博分享(不要第三方)持续更新中...
  5. 2种继承方式学习笔记
  6. html中如何计算图片的像素,html – 浏览器的1px计算问题(子像素问题)
  7. php中用date()取出的当前时间查8个小时的解决方法。
  8. 什么是隐形门? 隐形门安装要注意什么
  9. 苹果怒封Google、FB:私下购买用户隐私被制裁,数万员工受牵连
  10. C++ 第四章 4.1
  11. 【BAT】win10 命令行工具cmd乱码解决方案及cmd非常用命令chcp介绍
  12. Android Adb命令恢复出厂设置
  13. 工具 | CAN总线数据采集工具PCAN的使用教程
  14. “AI复活了我的妻子,但我决定跟她说再见了”
  15. python实现屏幕截图
  16. android listview适配器使用,android – 使用适配器在Listview中填充Listview
  17. Python中的list列表 tuple元组 set集合 dictionary字典
  18. 颜色的前世今生20·三原色到底该用哪一个?!
  19. 未来的全能保姆机器人作文_未来的保姆机器人
  20. Win11开机启动项怎么调整,Win11开机启动项怎么设置

热门文章

  1. 李晓光老师-银行服务营销专家
  2. LoongSSO 大中型WEB系统单点登陆(SSO)整合利器
  3. Termux简单上手安装
  4. Win8 建行网银解决方案
  5. 中专计算机教师天涯,中职教师进来聊聊!
  6. 酷科技 | 天空画布
  7. bzero 与 memset
  8. 试用期后被辞退是否能得到社会保险
  9. thinkcmf重置后台密码
  10. 2021最新 基于苹果CMS10 二次开发版 快猫视频模板 自适应WAP可封装双端app 苹果cms影视模板