Java学习笔记(二)JavaSE

  1. Markdown学习(方便写笔记记录,推荐文本编辑器Typora),文件后缀xxx.md

  • 标题:# 一级标题,## 二级标题,最多六级标题

  • 字体:**粗体**,*斜体*,***斜体加粗***,~~删除线~~

  • 引用:>引用效果

  • 分割线:---分割线,***分割线

  • 图片:![图片](本地或网络图片路径)

  • 超链接:[点击跳转到xxx](链接地址),markdown中不支持跳转,网站是支持的

  • 列表:1, 有序列表,- 无序列表

  • 表格:右键插入表格或者:|列名1|列名2|列名3|\n|--|--|--|\n|列1|列2|列3|

  • 代码:···Java,···Python等

  1. 计算机基础

  • Computer hardware= CPU+Motherboard主板+Memory内存+硬盘+显卡+IO设备键盘、鼠标、显示器

冯·诺伊曼体系结构

  • Computer software是使计算机按照事先预定好的顺序完成特定的功能,包括系统软件(DOS—DiskOperatingSystem、Windows、Linux、Unix、Mac、Android,iOS)和应用软件(wps,wechat)

  • 计算机语言发展:二进制语言-汇编语言-高级语言(C/C++/Java/C#/Python/PHP/JavaScript)

  1. Java入门(使用IDEA开发)

  1. Java的特性和优势:简单性、面向对象、可移植性、高性能、分布式、动态性、多线程、安全性、健壮性

  1. Java三大版本:JavaSE(标准版:桌面程序、控制台开发),JavaME(嵌入式开发:手机、小家电),JavaEE(E企业级开发:web端,服务器开发)

  1. JDK:Java Development Kit

JRE:Java Runtime Environment

JVM:Java Virtual Machine

  1. Java基础

  1. 注释://单行注释,/*多行注释*/,/**文档注释*/,注意规范

  1. Java标识符:

  • 所有标识符都应该以字母(A-Z或者a-z),美元符($)或者下划线(_)开始

  • 首字符之后可以是字母(A-Z或者a-z),美元符($),下划线(_)或数字的任何字符组合

  • 不能使用关键字作为变量名或方法名

  • 标识符是大小写敏感的

  • 不建议使用中文或拼音命名

  1. Java关键字

Java关键字

  1. 数据类型:强类型语言,所有变量都必须先定义后才能使用,安全性高而速度略差

基本类型:数值类型,boolean类型

  • 数值:大写Byte,Integer对应一个类

整数类型:byte占1个字节范围-128~127

short占2个字节范围

int占4个字节范围

long占8个字节范围

浮点类型:float占4个字节

double占8个字节

字符类型:char占2个字节

  • boolean类型:占1位,值为true或false

引用数据类型:类、接口、数组

  1. 数据单位:bit-Byte(B)-KB-MB-GB-TB,1024

  1. 类型转换:低----高,避免内存溢出

byte,short,char->int->long->float->double

运算中,不同类型的数据先转化为同一类型,然后进行运算

  • 强制类型转换 (类型)变量名 高->低

  • 自动类型转换 低->高

  • 注意点:不能对布尔值进行转换;不能把对象类型转换为不相干的类型,再把高容量转换到低容量的时候,强制转换;转换的时候可能存在内存溢出或者精度问题

  1. 变量:每个变量都必须声明其类型,变量的要素包括变量名、变量类型和作用域

type varname [=value][{,varname[=value]}]

数据类型 变量名 =值;可以用逗号隔开来声明多个同类型变量

  • 变量作用域:类变量static,实例变量(类内,方法外),局部变量(方法内部)

局部变量必须声明和初始化

实例变量从属于对象;如果不自行初始化,则默认为这个类型的默认值 0,0.0,false,null,u0000,除了基本类型,其余的默认值都是null

类变量从属于类在实例变量的基础上加static

  1. 常量:初始化后不再改变值,常量名一般使用大写字符

final 常量名 = 值

final double PI = 3.14

  1. 命名规范:

  • 所有变量、方法、类名:见名知意

  • 类名:首字母大写和驼峰原则,Man,GoodMan

  • 类成员变量和局部变量:首字母小写和驼峰原则:monthSalary

  • 方法名:首字母小写和驼峰原则:run(),runRun()

  • 常量:大写字母和下划线:MAX_VALUE

  1. 基本运算符:优先级使用()

  1. 包机制:用于区别类名的命名空间。一般利用公司域名倒置作为包名。import引用

Java官方包的帮助文档

Javadoc 命令使用来生成自己的API文档的:

用命令行生成包说明文档:

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

在文件夹下点击index.html查看生成结果

  1. Java流程控制

  1. 用户交互Scanner对象:java.util.Scanner

  • next( ):读取到有效字符后才可以结束输入;对输入有效字符之前遇到的空白,next()会自动将其去掉;只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符;next()不能得到带有空格的字符串

  • nextLine( ):以Enter为结束符,也就是说nextLine( )返回的时输入回车之前的左右字符;可以获得空白

  1. 顺序结构:从上到下

  1. 选择结构:

  • if单选择结构:if(){}

  • if双选择结构:if(){}else{}

  • if多选择结果:if(){}else if(){}else if(){}else{}

  • 嵌套的if结构:if(){if(){}}

  • switch多选结构:Java7以后的版本支持字符串比较。

case穿透现象:如果不写break则后面的case语句都会执行。

  1. 循环结构

  • while循环:while(){},先判断后执行

  • do...while循环:即使不满足条件也至少执行一次do{}while(),先执行后判断

  • for循环:for(初始化;布尔表达式;更新){},高效写法(100.for,fori),死循环for(;;){}

  • 增强for循环:主要用于数组和集合for(声明语句:表达式){}

  1. break,continue,goto

break:强制跳出循环

continue:跳出此次循环后去执行下一次

goto:是java的保留字,但在语言中不正式使用

  1. Java方法

  1. 类、对象、方法。实参、形参。

  • 设计方法的原则:一个方法只完成一个功能便于后续扩展。

  • 方法包括修饰符,返回值类型,方法名,参数类型,方法体

  • 值传递(Java)和引用传递

  1. 方法的重载:在一个类中,有相同的函数名称,但形参不同的函数

  • 方法重载的规则:方法名称必须相同,参数列表必须不同(个数不同,或类型不同、参数排雷顺序不同等),方法的返回类型可以相同也可以不同,仅仅返回类型不同不足以成为方法的重载。

  • 方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,一选择对应的方法,如果匹配失败,则编译器报错。

  1. 命令行传参:当需要在运行一个程序的时候再传递给他消息,就要靠命令行参数给main()函数实现


public static void main(String[] args) {
    for (int i = 0; i < args.length; i++) {
        System.out.println("args["+i+"]"+args[i]);
    }
}
  1. 可变参数:不定项参数,在指定参数类型后加一个省略号如(double...numbers)。一个方法中只能指定一个可变参数,他必须是方法的最后一个参数,任何普通的参数必须在它之前声明。

  1. 递归:方法调用自己。减少代码量,用有限的语句来定义对象的无限集合。栈机制。eg:阶乘

  • 递归头:即什么时候不调用自身方法,如果没有头,将陷入死循环

  • 递归体:什么时候需要调用自身方法。

  1. 数组:相同类型数据的有序集合

  1. 声明:int[] nums,创建:int[] nums = new int[10]

获取数组长度:arrays.length

  1. 内存分析:

  • 堆:存放new的对象和数组

  • 栈:存放基本变量类型

  • 方法区

  1. 数组的特点:

  • 其长度是确定的,数组一旦被创建,它的长度就是不可以改变的

  • 其元素必须是相同类型,不允许出现混合类型

  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型

  • 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量

  • 数组本身就是对象,Java中对象是在栈中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

  1. 数组的使用

  • for-each循环获取数组元素

  • 数组作方法入参

  • 数组作返回值

  1. 二维数组,int[][]

  1. Arrays类:java.util.Arrays包含许多静态方法,可直接使用类名进行调用,而不用使用对象来调用。如下可查询java方法的说明文档:

  • 给数组赋值:通过fill方法

  • 对数组排序:sort方法,按升序

  • 比较数组:equals比较是否相等

  • 查找数组元素:binarySearch可以对排序号的数组进行二分查找法操作

  1. 冒泡排序:复杂度O(n^2),共有八大排序算法

  1. 稀疏数组:数组中大部分元素为0时使用稀疏数组保存

处理方式是:记录数组一共有几行几列,有多少个不同的值

把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模

  1. 面向对象编程(Object-Oriented Programming ,OOP)

  1. 面向过程/面向对象:对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统,但是,具体到微观操作,仍然需要面向过程的思路去处理。

  • 面向对象编程的本质就是:以类的方式组织代码,以对象组织(封装)数据。

  • 其三大特性为:封装、继承、多态。

  • 从代码运行角度考虑是先有类后有对象。对象是具体的实例,类是对对象的抽象模板。

  1. 静态方法与类一起加载,非静态方法在类实例化后才存在。静态方法不能调用非静态方法。

  • 形参和实参,值传递和引用传递,this关键字。

  • 构造器constructor:一个类即使什么都不写,也会存在一个方法,即构造方法。必须和类的名称相同,并且没有返回值。一旦定义了有参构造,无参构造就必须显式定义。new本质在调用构造方法。

  1. 封装:数据的隐藏,通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。

  • “高内聚、低耦合”:类的内部数据操作细节自己完成,不允许外部干涉,金宝路莎奥里昂的方法给外部使用。

  • 属性私有,get/set方法一般不重载

  • 提高程序的安全性,保护数据;隐藏代码的实现细节 ,统一接口;提高系统的可维护性

  1. 继承:对某一批类的抽象,实现对现实世界更好的建模

  • 类与类之间的一种关系:继承、依赖、组合、聚合

  • extends:扩展,子类/派生类 是父类/基类的扩展

  • 属性类别:public>protected>default>private

  • 所有的类都直接或间接地继承object类

  1. super

  • 调用父类的构造器super();必须在子类构造器的第一行,默认调用父类的无参构造器

  • super必须只能出现在子类的方法或者构造方法中

  • super和this不能同时调用构造方法

  • 与this相比:

  • 代表的对象不同:this:本身调用者这个对象,super:代表父类对象的引用

  • 前提:this没有继承也能使用,super智能在继承条件才可以使用

  • 构造方法:this()本类的构造,super()父类的构造

  1. 方法重写@override:需要有继承关系,子类重写父类的方法

  • 方法名必须相同,参数列表必须相同

  • 修饰符:范围可以扩大,不能缩小,public>protected>default>private

  • 抛出异常:范围可以被缩小,不能扩大classnotfoundexception ->exception(大)

  • 方法的调用只和左边,定义的数据类型有关:A extends B B b = new A();

  • 为什么需要重写:父类的功能,子类不一定需要,或者不一定满足

  1. 多态:动态编译:类型的可扩展性变强

  • 一个对象的实际类型是确定的,可以指向的引用类型就不确定了,父类引用指向子类对象。

  • 对象能执行那些方法,主要看对象左边的类型

  • 多态是方法的多态,属性没有多态

  • 父类和子类,有联系可以进行转换,否则就会类型转换异常

  • 存在条件:继承关系,子类重写父类方法,父类引用指向子类对象,Father f1=new Son();

  • static方法属于类,不属于实例,不能重写

  • final常量,不能重写,final修饰的类没有子类(断子绝孙)

  • private方法,不能重写

  1. instanceof 类型转换 引用类型,判断一个对象是什么类型

  • 能否编译通过取决于二者是否有父子关系

  • 父类引用指向子类的对象

  • 把子类转换为父类,向上转型

  • 把父类转换为子类,向下转型:强制转换

  • 方便方法的调用,减少重复的代码

匿名代码块{ }与对象一起加载

静态代码块static{ }与类一起加载

new一个对象时的加载顺序:1,静态代码块,只在加载类时执行一次,2,匿名代码块,3,构造方法

  1. 抽象类:用来被继承(类只能单继承extends,但是接口可以多继承implements)

  • 不能new这个抽象类,只能靠子类去实现它;约束

  • 抽象类中可以写普通方法,抽象方法必须在抽象类中

  • 存在的意义:提高开发效率

  1. 接口:只有规范,自己无法写方法,专业的约束。约束和实现分离:面向接口编程。(普通类只有具体实现,抽象类有具体实现和规范(抽象方法))

  • 接口就是规范,定义的是一组规则

  • 接口的本质是契约,可以多继承

  • 接口中的所有定义的方法是默认抽象的public abstract,必须被重写

  • 接口中定义的属性是默认静态常量 public static final

  • 接口不能被实例化,接口中没有构造方法

  1. 内部类:在类的内部再定义一个类,可以访问外部方法的属性

局部类:定义在方法内部

  1. 异常Exception。当做对象来处理,java.lang.Throwable

  • 检查性异常:用户错误或问题引起的无法预见的异常

  • 运行时异常:可以被避免。

  • 错误:错误不是异常,而是脱离控制的问题,在代码中通常被忽略。如栈溢出,编译时一般检查不到错误。

  • 异常处理:try,catch,finally,throw,throws

  • 自定义异常:除了java内置的异常之外还可以自定义异常

  • 总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值