1.
1995年Sun公司开发了java
2009年Oracle收购了Sun公司
其中2004年的java5.0和2014年的java8.0更新力度最大
java特性:第一至今已有20多年了 第二编程语言 第三应用广泛
2.
二进制中逢二进一 1+1 =10 11+1=100
0000万 0000,0000亿 王健林的话说一个小目标
bit比特位 Byte字节 KB MB GB TPEZ 带tp的ez /正斜杠 \反斜杠
3.
java跨平台 JVM虚拟机(不跨平台)JRE运行java程序 JDK开发工具包
.java源文件---(javas.exe编译器)--->.class(字节码文件)----(java.exe运行)-->
4.
关键字(小写 + 特殊颜色)--@邮箱
标识符:$和_和大小写字母+数字,标识符不能是关键字,不能数字开头,类大驼峰,变量名和方法小驼峰
5.
常量:
字符串(内容可为空),单个整数类型/浮点类型,布尔类型(true/false),字符(内容不可为空,必须只有一个字符,可'中'),空常量(不能直接用来打印输出)
6.
变量
使用short和byte,右侧大小不能超过左侧范围
只有变量赋值了才可以打印使用
注意变量的作用域
int num1=10,num2=20,num3=30;定义/声明
7.
数据类型:基本数据类型(整数类型byte,short,int21个亿,long,浮点类型double,float,字符类型char,布尔类型boolean),引用数据类型(字符串,类,数组,接口)
java中默认整数类型是int(使用long类型要加L),浮点类型是double(使用float要加F)
浮点数可能只是一个近似值并非精确值(1/3)double 和 float区别
数据的范围与字节数无关,float(四个字节)比long(八个字节)数据范围更广泛
8.
自动类型转换/隐式类型转换 数据范围小->大
强制类型转换/显示类型转换 数据溢出(数据类型大->小 水桶)和精度损失(浮点到整形)
boolean类型不能发生数据转换
byte/short/char(char类型进行数据运算,字符会翻译成一个数字)在数据运算时先转换成int
9.
ASCII(美国信息交换标准码)
Unicode(万国码) 前面一样,后面包含更多字符
'0'->48 'A'->65 'a'->97
10.
运算符:+ - 表达式 运算符链接的式子 5+5
算数运算符:+(对于字符串来说String(不是关键字),加号代表链接操作,任何数据和字符串链接,结果都会变成字符串) - * / %(取模,整数取模才有意义) ++ --(单独使用,前++和后++没区别 混合使用注意先使用在++还是先++后使用(--同理)只有变量才可以自增自减,常量不能用)
运算中有不同类型,结果将会是数据类型范围大的那种
赋值运算符: =(常量不能用) += -= *= /= %= 复合赋值运算符自带一个类型转换
比较运算符 > < >= <= == != 比较运算符结果是一个boolean值,成立为true,不成立为false 1
11.
逻辑运算符: && || !具有短路效果,左边可以判断为最终效果,那么右边不再执行,节省性能(丈母娘房车存款)
三元运算符 条件判断?A:B A和B的值要符合接受的数据类型 三元运算符结果必须使用
12.
方法:你可以大致理解为C中函数 方法定义不能有嵌套包含关系 方法小驼峰
蒙牛工厂(方法) 原料:奶牛,饲料(参数) 产出物:鲜牛奶(返回值)
return有两个作用:第一停止当前方法;第二将返回值给调用处
需要数据才能完成有参,不需要数据就可以完成无参
方法调用:单独调用,打印调用,赋值调用
如果方法有返回值,必须写return 返回值,不能没有
对于一个void没有返回值的方法可以写return;也可以不写(return另一个作用停止当前程序)
方法的重载:多个方法名称一样,参数不一样 优点:只需记住一个方法名,就可以实现多个功能
其实println就是运用了多次重载实现的
14.
编译器的两大优化:对于byte/short/char来说,如果赋值没有超过范围,则编译器自动补一个强转,超出范围报错;如果表达式为常量,则编译器会先把若干个常量转化为结果,有变量则不行,这叫做编译器的常量优化
15.
顺序结构 风和日丽上网吧 if(年龄) if...else else if(条件一满足,条件二就可以走了)
switch(表达式 byte/char/int/short /String字符串/enum枚举)语句 结束标志代码执行完或遇到break (你好我也好) case 常量值:
for(我错啦宝宝) while(原谅你了,起来吧,地上怪凉的)do...while(挖矿)
确定循环多少次用for,不确定用while
break打断循环和switch continue跳过当前循环 开始下一次循环
16.
IDEA很多人都在用 Eclipse(免费) 集成开发(IDE) 把大象装在冰箱
project(项目)---->module(模块)---->package(包,一组文件夹)
17.
数组是一个引用数据类型
数组两种初始化方式:动态初始化(指定长度),静态初始化(指定内容)
使用建议:如果不确定数组的个数用动态初始化,如果确定了数组个数,用静态初始化
C中数组下标在Java中叫索引值
直接打印数组名称,得到的是数组内存地址哈希值
动态初始化数组默认值:整形(0) 浮点(0.0) 字符('\u0000') boolean(false) 引用(null)
静态初始化也有默认值的过程,只不过系统马上将默认值换成为了指定值
Java内存的五个划分:栈(方法的局部变量,方法运行在栈区进行,一超作用域立刻在栈区消失);堆区(凡是new出来的东西,都在堆区中,堆内存的里面的东西都有一个地址16进制);方法区(存放.class相关信息,包含方法的信息);本地方法栈(与操作系统相关);寄存器(与CPU相关)
所有引用类型都可以赋值为null,代表其中什么都没有.数组只有初始化(定义)才可以使用该元素。如果只赋值了null没有进行new创建就会发生异常
求数组长度 数组名称.length 将会得到一个int数字,代表其长度
数组创建后一旦运行,长度不可改变
数组遍历:打印数组中的每个元素 求数组的最值:比武招亲 0我不动手,不是我嘛?不现实当中有的人战斗力还真是负值
数组传参,传的是地址值;数组作为方法返回,返回的也是地址值
18.
面向对象:自动洗衣机 面向过程:手洗一系列操作,每个细节都要亲历亲为
遍历数组为 [10,20,30,40,50]
面向对象语言有三大特性:封装(洗衣机内部构造原理);继承;多态
类(抽象的)是属性(体重+身高+年龄)和行为(吃喝拉撒)的集合 对象(具体的 一个人,一支笔,一个晚上) 类是对象的模板(苹果构造图),对象是类的实体(苹果手机)
属性(成员变量)事物的状态信息 行为(成员方法):事物能做什么
导包:也就是需要使用的类在什么位置 对于当前类属于同一个包的情况,可以省略导包语句不写 import 包名称.类名称
当使用一个对象类型作为方法的返回值时,返回值就是对象的地址值
局部变量(在方法内)(方法中使用)(使用必须赋值)(栈内存)(随着方法出栈而消失)和成员变量(在方法外)(整个类全部都可以用)(不赋值会有默认值)(堆内存)(随着对象消失而消失)
private关键字阻止不合理的数据被设置进来,一旦使用本类当中任意访问,超出本类范围就不可以直接访问了
间接访问private成员变量,就要定义一对Getter/Setter方法 必须是setxxx或者是getxxx的命名规则。对于Getter来说不能有参数,返回值类型和成员变量对应;对于Setter来说不能有返回值,参数类型和成员变量对应
当方法的局部变量和成员变量重名的时候,根据就近原则,优先使用局部变量.如果需要访问本类的成员变量,要用 this.成员变量名 通过谁调用的方法谁就是this
构造方法就是在创建对象的方法,当我们用new来创建对象时,就是在调用构造方法 public 类名称(参数类型 参数名称){方法体} 构造方法的名称必须和所在的类完全一样,构造方法不要返回值类型,连void都不写;构造方法也不能return一个返回值;如果不编写构造方法,那么编译器会自动送你一个,没有参数,方法体什么也不用做;构造方法也可以重载
一个标准的类通常有四个组成部分:所有的成员变量都要使用private;每个成员变量都要编写一堆Getter/Setter方法;编写一个无参数的构造方法;编写一个有参数的构造方法
19.
API java的字典 是JDK给我们提供类的说明文档
Scanner:类似于C中scanf .nextInt() (输入数字,返回int) .next() (输入字符串)
创建对象标准格式 类名称 对象名 = new 类名称(); 匿名对象只有右边的对象,没有左边的名字和赋值运算符 ;匿名对象只能使用唯一一次,下次使用要再创建一个新对象 使用建议:如果对象只使用唯一一次,就可以用匿名对象
Random用来生成随机数 参数代表范围(左闭右开)
对象数组
数组的长度不可改变,但ArrayList集合的长度是可以随便变化的,有一个
程序当中所有双引号字符串都是String的对象,放在字符串常量值中;new不在池当中(就算没有new,也照样是) 字符串特点:字符串内容不可改变;字符串效果相当于char[]字符数组,但底层原理是byte[]字节数组
对于基本类型来说,==等于赋值比较;对于引用来说,==是地址值比较 .equals()参数可以是任何对象,只有参数是一个字符串,并且内容相同时才会给true;equals(区分大小写)具有对称性,比较对方一个常量和一个变量,建议把常量放在前面,防止变量是null造成空指针异常 equalsIgnoreCase不区分字符串的大小写 .length(s)字符串长度 .concat()字符串追加 .charAt()获取字符串索引值的单个字符 .indexOf("")查找参数字符串在本字符串中的位置 .substring(可,可不,)字符串的截取
.toCharArray()当前字符串拆分为字符数组作为返回值,可以对单个字符进行操作 .getBytes()字符串转换为字节数组 .replace(,)旧字符串转换为新字符串 .split分割字符串,参数其实是一个正则表达式,用英文句点"."要写成"\\."
一旦使用static关键字,那么这样的内容不再属于对象自己,而是属于类;凡是在本类的对象,都共享同一份(教室) 如果没有static关键字,那么首先要创建对象,然后通过对象才能使用它,如果有了static关键字,那么不需要创建对象,直接就通过类名称使用它 对于静态方法来说,可以通过对象名调用,但不推荐这种写法在编译之后也会被javac翻译成类名称.静态方法,也可以直接通过类名称调用
static修饰成员方法,这就变成了静态方法,静态方法不属于对象,而是属于类 静态不能直接访问非静态(内存先有静态内容,先人知道后人,但后人不知道先人) 静态方法中不能用this(this代表当前对象,通过谁调用的方法,谁就是当前对象) 根据类名称访问静态成员变量的时候,全程和对象就没关系,只有和类有关系
静态代码块的格式是 当第一次用到本类时,静态代码块执行唯一一次,静态内容优先于非静态,所以静态内容比构造方法先执行 静态代码块的典型用途:用来一次性地对静态成员变量进行赋值
.Arrays是一个与数组相关的工具类,里面提供了大量的静态方法 .sort(数组)升序对数组元素进行排序 (数值从小到大,字符串按照字母升序,自定义类型需要Comparable或者Comparator接口的支持)
java.util.Math类是关于数学的工具类,里面提供了大量的静态方法 .abs绝对值 .ceil向上取整 .floor向下取整 .round四舍五入 Math.PI近似代表圆周率 使用Math。ceil方法 -10.8可以变成-10,double可以++的
继承性:继承是多态的前提,没有继承就没有多态 继承主要解决的问题是:共性抽取 父类(超类,基类) 子类(派生类) 子类可以拥有父类的内容,也可以拥有自己专有的内容 public class 子类名称 extends 父类名称{//...} 子类和父类成员变量重名,访问有两种方式:直接访问,等号左边是谁,就优先有谁;间接访问:方法属于谁就优先用谁 在子类中,直接写成员变量名是局部变量,this.本类成员变量名 父类成员变量 super.成员变量名
父类子类访问方法的规则:创建的对象是谁,就优先用谁 无论是成员方法还是成员变量,如果没有都是向上找父类,绝不会向下找子类 重写:在继承关系中,方法的名称一样,参数列表也一样(覆盖,覆写) 方法的覆盖重写特点:创建的是子类对象,则优先用子类方法 @override写在方法前面,用来检测是不是有效的覆盖重写
子类方法的返回值必须小于等于父类方法的返回值 java.Lang.Object是所有类的公共最高父类 子类方法的权限必须大于等于父类方法的权限修饰符 public>protected>(default)不是关键字,而是什么都不写,留空>privatte
子类调用父类构造方法,不写赠送super();写了则用指定的super调用,super只能有一个,还必须是第一个 super在子类的成员方法中,访问父类的成员变量,访问父类的成员方法;在子类的构造方法中,访问父类的构造方法
this,在本类的成员方法中,访问本类的成员变量,访问本类的另一个成员方法;在本类的构造方法中,访问本类的另一个构造方法this(),调用也必须是构造方法的第一个语句,并且和super两种构造调用,不能同时使用 内存方法区子类额外有一个super_class用来找到父类.class;new子类时,里面有父类内容
java单继承,只有一个父亲;java也可以多级继承,我有一个父亲,父亲也有一个父亲;java一个父亲可以有多个子类
如果父类方法不确定进行{}方法体实现,那么这应该就是一个抽象的方法 抽象方法就是加上abstract关键字,去掉大括号,分号结束 抽象方法所在的类,必须是抽象类才行,在clsaa之前写上abstract 使用抽象类和抽象方法不能直接创建new抽象对象,必须用一个子类来继承抽象父类 ,子类必须覆盖重写抽象父类当中所有的抽象方法(去掉抽象方法abstract关键字,然后补上方法体和大括号),创建子类对象进行使用