JavaSE

代码注释

  1. 单行注释 //
  2. 多行注释 /* /
  3. 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() {}//写了有参必须显示的给出无参构造
  1. 使用new关键字,本质上是在用构造器
  2. 用来初始化属性

对象的内存分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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();
  1. 静态方法:调用只和左边有关
  2. 非静态方法:Override,和实际生成的对象有关(右边)

重写:需要有继承关系,子类重写父类的方法!

  1. 方法名必须相同
  2. 参数列表必须相同
  3. 修饰符:子类范围可以扩大不能缩小 private<protected<default<public
  4. 抛出的一场:范围可以缩小不能扩大。 Exception>ClassNotFoundException

不可重写的方法:

  1. static 属于类的,不属于实例
  2. final 无法改变
  3. private 不能被继承,更没有多态

多态

     //一个对象的实际类型是确定的//new Person()//new Student()//可以指向的引用类型就不确定了,父类的引用指向子类//Student能调用自己的或者继承来的方法Student s1=new Student();//Person父类型,可以指向子类,但不能调用子类的方法eatPerson s2=new Student();Object s3=new Student();s1.eat();((Student)s2).eat(); //需强制转换才能调用
  1. 方法才有多态
  2. 有继承关系的父子类, 否则会转换异常ClassCastException!
  3. 方法需要重写,父类引用指向子类 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方法。

接口

只有规范,约束和实现分离。面向接口编程,伪多继承

  1. 定义一些方法,让不同的人实现
  2. public abstract,子类必须要重写接口的方法
  3. 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 基础汇总相关推荐

  1. java实现linkstring,【JAVA SE基础篇】32.String类入门

    [JAVA SE基础篇]32.String类入门 1.字符串 1.String类又称作不可变字符序列 2.String位于java.lang包中,java程序默认导入java.lang包下所有的类 3 ...

  2. 面试必会系列 - 1.1 Java SE 基础

    本文已收录至 github,完整图文:https://github.com/HanquanHq/MD-Notes Java SE 基础 面向对象 Java 按值调用还是引用调用? 按值调用指方法接收调 ...

  3. java 中间容器 表格_【JAVA SE基础篇】45.迭代器、Collections工具类以及使用容器存储表格...

    本文将要为您介绍的是[JAVA SE基础篇]45.迭代器.Collections工具类以及使用容器存储表格,具体完成步骤: 1.迭代器 迭代器为我们提供了统一遍历容器(List/Map/Set)的方式 ...

  4. Java复习总结(二)Java SE基础知识

    Java SE面试题 目录 Java SE基础 基本语法 数据类型 关键字 面向对象 集合 集合类概述 Collection接口 进阶 线程 锁 JDK 反射 JVM GC io操作和NIO,AIO ...

  5. Java SE基础(十六)集合

    Java SE基础(十六)集合 集合 集合体系 数据结构简述 栈 队列 数组 链表 Collection集合 List集合 ArrayList集合 LinkedList集合 Set集合 HashSet ...

  6. Java SE 基础知识

    Java SE 基础知识 1 2 @(Notes)[J2SE, Notes] VICTORY LOVES PREPARATION. 特别说明: 该文档在马克飞象查阅最佳: 本部分知识还在迭代中,欢迎补 ...

  7. Java SE基础(更新中)

    Java的运行机制 Java SE基础(更新中) 基本语法 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的. 类名:对于所有的类来说,类名的首字母应该大写 ...

  8. Java SE 基础(十)Java中的异常

    Java SE 基础(十)Java中的异常 什么是异常 异常的处理 异常类 throw和throws 自定义异常 什么是异常 Java 中处理错误的一种机制,Java 中的错误大致分为两类,一类是编译 ...

  9. Java SE基础(十四)常用API

    Java SE基础(十四)常用API 概述 Object类 构造方法 成员方法 toString()方法 equals(Object obj)方法 Arrays排序 Arrays类概述 Arrays成 ...

  10. Java SE 基础知识体系梳理

    ## Java SE 基础知识体系梳理 ----------day01------------- (1)计算机的体系结构 (2)Java语言的概述 (3)开发环境的搭建和使用 1.计算机的体系结构(常 ...

最新文章

  1. 官方iPhone SDK和开源工具链
  2. linux变量inode,linux字符cdev和Inode的关系
  3. 底部导航栏的几种实现方式
  4. python:series一些函数用法
  5. 30年职场生涯的感悟[转]
  6. 经典|深入理解 Go高性能网络编程模型
  7. random_normal_initializer 使用
  8. 基于JAVA+SpringBoot+Mybatis+MYSQL的企业考勤管理系统
  9. 解决mysql分页数据错乱问题
  10. taobao淘宝 开源的项目tair 简介
  11. sev2008服务器系统,在windows 2008 64位系统安装sql server 2000
  12. 零基础学模拟电路--3.同相放大器、反相放大器、加法器、减法器、积分器、微分器
  13. vue项目导入excel数据
  14. 组态王通过Modbus TCP与ESP32通讯
  15. 关于android中的.9图(一)——如何画.9图
  16. Python实现GWO智能灰狼优化算法优化支持向量机分类模型(SVC算法)项目实战
  17. 雅思听力常见人名及地名(常考,必备)
  18. 程序员应了解的那些事(4)求递归算法的时间复杂度
  19. 计算久期matlab,[MATLAB代码模板]固定收益证券计算
  20. elasticsearch 打分 源码_Elasticsearch搜索之explain评分分析

热门文章

  1. 恒讯科技分析:海外云服务器的网络防火墙怎么设?
  2. bong手环显示连接不上服务器,bong智能手环使用说明
  3. 别再吐槽12306了!有本事你来写架构
  4. python识别条形码_用 Python 和 OpenCV 检测图片上的条形码
  5. php f4v元数据,CKplayer 超酷视频播放器(支持flv,f4v,mp4,rtmp)X2 bulid2020.09.20
  6. [江枫]用Amoeba构架MySQL分布式数据库环境
  7. 【江枫】lvm2与powerpath的Found duplicate PV问题
  8. 商家冷启难题,快手每天8亿流量能解决吗?
  9. 安卓开发:医院预约挂号app
  10. FOJ1303——Calendar