JAVA SE 基础汇总
JavaSE
代码注释
- 单行注释 //
- 多行注释 /* /
- JavaDoc文档注释:大型商业项目 /** @Author @Description */
标识符与关键字
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ShWSE45q-1612756378236)(C:\Users\13611\AppData\Roaming\Typora\typora-user-images\image-20210202180714159.png)]
Java 中标识符是为方法、变量或其他用户定义项所定义的名称。标识符可以有一个或多个字符。在 Java 语言中,标识符的构成规则如下。
- 标识符由数字(09)和字母(AZ 和 a~z)、美元符号($)、下划线(_)以及 Unicode 字符集中符号大于 0xC0 的所有符号组合构成(各符号之间没有空格)。
- 标识符的第一个符号为字母、下划线和美元符号,后面可以是任何字母、数字、美元符号或下划线。##
数据类型
Java是一种强类型语言,数据类型分为:基本类型与引用类型
基本数据类型:byte、short、int、long、float(4)、double、char、boolean
引用数据类型:类、接口、数组
//浮点数扩展 银行问题
//BigDecimal 数学工具类
//float 有限 离散 舍入误差 大约float f=0.1f;double d=1.0/10;System.out.println(d==f); //输出false//字符拓展:本质还是数字System.out.println((int)'c');System.out.println((int)'中');//UniCode编码char c='\u0061';System.out.println(c); //a//进制扩展int n1=10;int n2=010; //八进制int n3=0x10; //十六进制
什么是字节
是计算机数据处理的基本单位,习惯上用B表示,1B=8bit
类型转换
运算中,不同类型的数据先转化为同一类型,然后再进行运算。
强制转换:(类型)变量名 高->低,会出现精度缺失和内存溢出的问题
自动转换:低->高 Tips:bool类型不能转换
int i=100;byte b=(byte)i; //强制转换float f2=i; //自动转换System.out.println((int)23.4f); //强制转换会导致精度缺失的问题
变量
最基本的存储单元,包括变量名,变量类型和作用域
public class Demo1 {String name; //实例变量:从属于对象,如果不初始化,默认值( 0 null false)static double salary=2500; //类变量public static void main(String[] args) {int i=10; //局部变量:必须声明和初始化值System.out.println(salary);}
}
常量
static final double PI =3.14 //常量,大写,修饰符不区分顺序
引用类型
对象是通过引用来操作的:栈—>堆
运算符
double pow=Math.pow(2, 3); //Math类来计算次方,位运算:2<<3int e=5;
boolean flag= (e<4)&&(e++<4); //逻辑运算符:短路,e<4已经为false,不执行e++
System.out.println(e); //e=5System.out.println(""+10+20); //充当字符串连接符,1020
System.out.println(10+20+""); //30
包机制
方便Java更好的组织类,为了防止命名空间重复。一般利用公司域名倒置作为包名。
在IDEA中,Alt+Enter可import对应的包
JavaDoc
JavaDoc命令是用来生成自己API文档的,index.html
javadoc -encoding UTF-8 -charset UTF-8 doc.java //命令行编译成一份文档
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5BUjMTjD-1612756378243)(C:\Users\13611\AppData\Roaming\Typora\typora-user-images\image-20210203180458837.png)]
Scanner
Scanner reader=new Scanner(System.in);if(reader.hasNextLine()) //是否有输入{String str=reader.nextLine(); //读取一整行,空格也可以读取。//next()空格就断了,不常用。System.out.println("输出的内容是:"+str);}reader.close(); //习惯
流程控制
if、switch、while、do、for 不一一赘述,只说一些注意点
if(s.equals("Hello")){} //字符串相等判断用equals
switch中的变量类型可以是:byte、short、int、char、String(反编译hashCode)
注意加break避免case穿透
String name="carmine";//字符的本质还是数字//反编译:java--class--反编译(IDEA)switch (name) //通过name.hashCode(){case "周逸":System.out.println("周逸");break;case "carmine":System.out.println("carmine");break;default:System.out.println("匹配失败");}
for语句三个都可以为空
for( ; ; ){} //死循环
for(int x:number) {} //for-each
方法
System.out.println() 也是类.对象.方法。
方法也要确保原子性:一个方法只完成1个功能,利于后期扩展
public static int add(int a, int b) {...} //重载参数列表必须不同(个数、类型、顺序不同)public static double add(double a,double b){...}
命令行传参
运行时给它传递消息,通过命令行给main()函数传参来实现。
javac mainMethod.java
cd ../../../ //需要回退到src目录才能执行java命令
java com.carmine.method.mainMethod this is carmine
可变参数
在指定参数类型后加一个…,一个方法中只能有一个可变参数,也必须是方法最后一个参数。
double max = demo02.max(new double[]{1, 2, 3});//方法调用,传递一个数组public static double max(double ...lists){ //可变参数if(lists.length==0){System.out.println("长度为0");return 0;}double max=lists[0];for (int i = 1; i < lists.length; i++) {if(lists[i]>max)max=lists[i];}return max;}
递归
大问题转换为小问题,解决小问题。 要有递归头(什么时候终止递归),否则为StackOverFlow。
大计算不用递归,压栈过多会影响机器性能。
b
边界条件: 前阶段: 返回阶段:
数组
同类型、有序、可直接访问的数据集合
int[] array; //1.声明数组array=new int[10]; // 2.分配空间,长度确定for (int i = 0; i < array.length; i++) {array[i]=i; //3.赋值,数组对象本身是在堆中的}
内存分析
**栈:**一般来说,基本数据类型直接在栈中分配空间,局部变量(在方法代码段中定义的变量)也在栈中直接分配空间,当局部变量所在方法执行完成之后该空间便立刻被JVM回收,还有一种是引用数据类型,即我们通常所说的需要用关键字new创建出来的对象所对应的引用也是在栈空间中,此时,JVM在栈空间中给对象引用分配了一个地址空间(相当于一个门牌号,通过这个门牌号就可以找到你家),在堆空间中给该引用的对象分配一个空间,栈空间中的地址引用指向了堆空间中的对象区(通过门牌号找住址);
**堆:**一般用来存放用关键字new出来的数据。
Arrays
是一个数组集合,拥有copyOf()、binarySearch()、 sort()、toString(a)等方法
int[] a={2,332,1234141,2321,82};Arrays.sort(a);//自动排序,原数组System.out.println(Arrays.toString(a)); //可直接打印数组int i = Arrays.binarySearch(a, 2321); //对已经排序的进行二分查找System.out.println(i);Arrays.fill(a, 2,4,0); //2-4填充为0
稀疏数组
当一个二位数组中大部分元素都为同一值时,可以用稀疏数组来保存元素
OOP
封装 继承 多态
静态与非静态方法
类的静态方法可以直接类名.方法;非静态方法必须要先实例化,通过对象.方法调用
静态方法中只能调用(已经加载入内存的)静态方法,而不能调用还未加载的非静态方法。
构造器
当没有构造器时,java文件编译成class时,会自动生成一个默认的无参构造器。
public Student() {}//写了有参必须显示的给出无参构造
- 使用new关键字,本质上是在用构造器
- 用来初始化属性
对象的内存分析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m8lk2Q6E-1612756378248)(C:\Users\13611\AppData\Roaming\Typora\typora-user-images\image-20210204194729377.png)]
方法去是堆中的特殊区域;其中存放类以及静态方法,在运行时就加载;shout()存一份,在方法区中;name的赋值从常量池给。
封装
要求:高内聚,低耦合。高内聚就是类的内部操作细节都自己完成,不允许外部干涉;低耦合,仅暴露少量的方法给外部。
策略:属性私有,get/set
继承
extends单继承,父类的方法一般都是public,属性private,子类继承父类的所有属性以及方法;final不可继承。
super
public Student(String name){super(name); //默认调用父类的无参构造器,有参必须要显示调用,并且必须在第一行。System.out.println("无参student");}
Tips:super()和this()不能同时调用,都必须在第一行
this:本身调用者这个对象 this()本类构造
super:代表父类对象的引用 super()父类构造
方法重写
A a=new A();a.test();B b=new A(); //父类的引用指向子类b.test();
- 静态方法:调用只和左边有关
- 非静态方法:Override,和实际生成的对象有关(右边)
重写:需要有继承关系,子类重写父类的方法!
- 方法名必须相同
- 参数列表必须相同
- 修饰符:子类范围可以扩大不能缩小 private<protected<default<public
- 抛出的一场:范围可以缩小不能扩大。 Exception>ClassNotFoundException
不可重写的方法:
- static 属于类的,不属于实例
- final 无法改变
- private 不能被继承,更没有多态
多态
//一个对象的实际类型是确定的//new Person()//new Student()//可以指向的引用类型就不确定了,父类的引用指向子类//Student能调用自己的或者继承来的方法Student s1=new Student();//Person父类型,可以指向子类,但不能调用子类的方法eatPerson s2=new Student();Object s3=new Student();s1.eat();((Student)s2).eat(); //需强制转换才能调用
- 方法才有多态
- 有继承关系的父子类, 否则会转换异常ClassCastException!
- 方法需要重写,父类引用指向子类 father f=new Son();
instanceof关键字
System.out.println(X instanceof Y);
System.out.println(s instanceof Object);//true
//如果X和Y存在父子关系,则编译通过
//如果X对象的类型是Y的子类型,则输出true
强制转换
//高 低 (自动转换)——向上转型,会丢失方法Person obj=new Student();//使用“低”的方法 (强制转换)((Student)obj).eat();
static
private static int age; //静态属性,类独有一份public static void go(){ //静态方法 可直接调用 类名.go()}static { //静态代码块,用于加载初始化数据,永久只执行一次}
抽象类
一种约束,期望别人来实现。子类必须实现抽象类的所有abstract方法。
接口
只有规范,约束和实现分离。面向接口编程,伪多继承
- 定义一些方法,让不同的人实现
- public abstract,子类必须要重写接口的方法
- implements可以实现多个接口
内部类
内部类可以获取外部类的private属性,静态内部类只能获取static属性
局部内部类:作用域在某个方法中
匿名内部类:没有名字初始化类,不用将实例保存到变量中
UserService userService=new UserService(){public void hello(){}
}
异常机制
运行中出现不期而至的个忠状况,影响了正常的程序执行流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EYg0k56t-1613278512848)(C:\temp\Image.png)]
Error系统内部错误/资源耗尽(OutOfMemeryError)等:通常捕获不到,也不是软件可以解决的运行时异常;Error是灾难性的致命错误。
runtimeException 编译器不报错 程序员的问题,需要逻辑上避免
非运行异常(其余的IOException) 编译器会报错 要求必须捕获异常
定义异常
int a=1;int b=0;try {//try监控区域if(b==0) { //主动抛出异常 throwthrow new ArithmeticException();}System.out.println(a/b);} catch (ArithmeticException e) {//catch(想要捕获的异常类型)捕获异常// TODO: handle exceptionSystem.out.println("程序出现异常,变量b不能为0");//e.printStackTrace();//打印错误的信息}catch (Exception e) {//捕获多个异常,从小到大写异常// TODO: handle exceptionSystem.out.println("Exception");}finally {//处理善后工作System.out.println("finally");}
方法中抛出异常
public static void main(String[] args) {try {Test2.test(1,0);} catch (ArithmeticException e) { //捕获抛出的异常// TODO: handle exceptionSystem.out.println("Exception");}//原有的程序会继续执行System.out.println("程序继续运行,没有被异常中断");}//假设这个方法处理不了这个异常,向上抛出public static void test(int a,int b ) throws ArithmeticException{if(b==0) { //主动抛出异常 throwthrow new ArithmeticException();}}
自定义异常
public class MyException extends Exception{//传递数字大于10private int detail;public MyException(int detail) {super();this.detail = detail;}//toString:打印异常信息@Overridepublic String toString() { return "MyException [detail=" + detail + "]";}
}
JAVA SE 基础汇总相关推荐
- java实现linkstring,【JAVA SE基础篇】32.String类入门
[JAVA SE基础篇]32.String类入门 1.字符串 1.String类又称作不可变字符序列 2.String位于java.lang包中,java程序默认导入java.lang包下所有的类 3 ...
- 面试必会系列 - 1.1 Java SE 基础
本文已收录至 github,完整图文:https://github.com/HanquanHq/MD-Notes Java SE 基础 面向对象 Java 按值调用还是引用调用? 按值调用指方法接收调 ...
- java 中间容器 表格_【JAVA SE基础篇】45.迭代器、Collections工具类以及使用容器存储表格...
本文将要为您介绍的是[JAVA SE基础篇]45.迭代器.Collections工具类以及使用容器存储表格,具体完成步骤: 1.迭代器 迭代器为我们提供了统一遍历容器(List/Map/Set)的方式 ...
- Java复习总结(二)Java SE基础知识
Java SE面试题 目录 Java SE基础 基本语法 数据类型 关键字 面向对象 集合 集合类概述 Collection接口 进阶 线程 锁 JDK 反射 JVM GC io操作和NIO,AIO ...
- Java SE基础(十六)集合
Java SE基础(十六)集合 集合 集合体系 数据结构简述 栈 队列 数组 链表 Collection集合 List集合 ArrayList集合 LinkedList集合 Set集合 HashSet ...
- Java SE 基础知识
Java SE 基础知识 1 2 @(Notes)[J2SE, Notes] VICTORY LOVES PREPARATION. 特别说明: 该文档在马克飞象查阅最佳: 本部分知识还在迭代中,欢迎补 ...
- Java SE基础(更新中)
Java的运行机制 Java SE基础(更新中) 基本语法 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的. 类名:对于所有的类来说,类名的首字母应该大写 ...
- Java SE 基础(十)Java中的异常
Java SE 基础(十)Java中的异常 什么是异常 异常的处理 异常类 throw和throws 自定义异常 什么是异常 Java 中处理错误的一种机制,Java 中的错误大致分为两类,一类是编译 ...
- Java SE基础(十四)常用API
Java SE基础(十四)常用API 概述 Object类 构造方法 成员方法 toString()方法 equals(Object obj)方法 Arrays排序 Arrays类概述 Arrays成 ...
- Java SE 基础知识体系梳理
## Java SE 基础知识体系梳理 ----------day01------------- (1)计算机的体系结构 (2)Java语言的概述 (3)开发环境的搭建和使用 1.计算机的体系结构(常 ...
最新文章
- 官方iPhone SDK和开源工具链
- linux变量inode,linux字符cdev和Inode的关系
- 底部导航栏的几种实现方式
- python:series一些函数用法
- 30年职场生涯的感悟[转]
- 经典|深入理解 Go高性能网络编程模型
- random_normal_initializer 使用
- 基于JAVA+SpringBoot+Mybatis+MYSQL的企业考勤管理系统
- 解决mysql分页数据错乱问题
- taobao淘宝 开源的项目tair 简介
- sev2008服务器系统,在windows 2008 64位系统安装sql server 2000
- 零基础学模拟电路--3.同相放大器、反相放大器、加法器、减法器、积分器、微分器
- vue项目导入excel数据
- 组态王通过Modbus TCP与ESP32通讯
- 关于android中的.9图(一)——如何画.9图
- Python实现GWO智能灰狼优化算法优化支持向量机分类模型(SVC算法)项目实战
- 雅思听力常见人名及地名(常考,必备)
- 程序员应了解的那些事(4)求递归算法的时间复杂度
- 计算久期matlab,[MATLAB代码模板]固定收益证券计算
- elasticsearch 打分 源码_Elasticsearch搜索之explain评分分析
热门文章
- 恒讯科技分析:海外云服务器的网络防火墙怎么设?
- bong手环显示连接不上服务器,bong智能手环使用说明
- 别再吐槽12306了!有本事你来写架构
- python识别条形码_用 Python 和 OpenCV 检测图片上的条形码
- php f4v元数据,CKplayer 超酷视频播放器(支持flv,f4v,mp4,rtmp)X2 bulid2020.09.20
- [江枫]用Amoeba构架MySQL分布式数据库环境
- 【江枫】lvm2与powerpath的Found duplicate PV问题
- 商家冷启难题,快手每天8亿流量能解决吗?
- 安卓开发:医院预约挂号app
- FOJ1303——Calendar