零碎Java

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_第1张图片
.java源文件---(javas.exe编译器)--->.class(字节码文件)----(java.exe运行)-->

4. 
关键字(小写 + 特殊颜色)--@邮箱 
标识符:$和_和大小写字母+数字,标识符不能是关键字,不能数字开头,类大驼峰,变量名和方法小驼峰零碎Java_第2张图片

5.
常量:
字符串(内容可为空),单个整数类型/浮点类型,布尔类型(true/false),字符(内容不可为空,必须只有一个字符,可'中'),空常量(不能直接用来打印输出)

6.
变量
使用short和byte,右侧大小不能超过左侧范围
只有变量赋值了才可以打印使用
注意变量的作用域
int num1=10,num2=20,num3=30;定义/声明

7.
数据类型:基本数据类型(整数类型byte,short,int21个亿,long,浮点类型double,float,字符类型char,布尔类型boolean),引用数据类型(字符串,类,数组,接口)零碎Java_第3张图片
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(不是关键字),加号代表链接操作,任何数据和字符串链接,结果都会变成字符串)   -   *   / %(取模,整数取模才有意义) ++  --(单独使用,前++和后++没区别  混合使用注意先使用在++还是先++后使用(--同理)只有变量才可以自增自减,常量不能用)  
运算中有不同类型,结果将会是数据类型范围大的那种
赋值运算符: =(常量不能用)  +=   -=  *=  /=  %=       复合赋值运算符自带一个类型转换  零碎Java_第4张图片
比较运算符 >  <  >=  <=  ==  !=  比较运算符结果是一个boolean值,成立为true,不成立为false   1

11.
逻辑运算符: &&  ||  !具有短路效果,左边可以判断为最终效果,那么右边不再执行,节省性能(丈母娘房车存款)
三元运算符   条件判断?A:B     A和B的值要符合接受的数据类型   三元运算符结果必须使用
 

12.
方法:你可以大致理解为C中函数  方法定义不能有嵌套包含关系  方法小驼峰
蒙牛工厂(方法) 原料:奶牛,饲料(参数)  产出物:鲜牛奶(返回值)
return有两个作用:第一停止当前方法;第二将返回值给调用处
需要数据才能完成有参,不需要数据就可以完成无参
方法调用:单独调用,打印调用,赋值调用
如果方法有返回值,必须写return 返回值,不能没有
对于一个void没有返回值的方法可以写return;也可以不写(return另一个作用停止当前程序)
方法的重载:多个方法名称一样,参数不一样   优点:只需记住一个方法名,就可以实现多个功能
其实println就是运用了多次重载实现的零碎Java_第5张图片零碎Java_第6张图片

13.jshell  可以处理简单的程序  /exit退出零碎Java_第7张图片

14.
编译器的两大优化:对于byte/short/char来说,如果赋值没有超过范围,则编译器自动补一个强转,超出范围报错;如果表达式为常量,则编译器会先把若干个常量转化为结果,有变量则不行,这叫做编译器的常量优化零碎Java_第8张图片

 

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(包,一组文件夹)零碎Java_第9张图片

17.
数组是一个引用数据类型
数组两种初始化方式:动态初始化(指定长度),静态初始化(指定内容)零碎Java_第10张图片
使用建议:如果不确定数组的个数用动态初始化,如果确定了数组个数,用静态初始化
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]

零碎Java_第11张图片零碎Java_第12张图片
面向对象语言有三大特性:封装(洗衣机内部构造原理);继承;多态
类(抽象的)是属性(体重+身高+年龄)和行为(吃喝拉撒)的集合    对象(具体的  一个人,一支笔,一个晚上)     类是对象的模板(苹果构造图),对象是类的实体(苹果手机)
属性(成员变量)事物的状态信息       行为(成员方法):事物能做什么

零碎Java_第13张图片
通常情况下,一个类并不能直接使用,需要创建一个对象才能使用

零碎Java_第14张图片
导包:也就是需要使用的类在什么位置    对于当前类属于同一个包的情况,可以省略导包语句不写   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集合的长度是可以随便变化的,有一个代表泛型(也就是在集合中的所有元素,必须是同一类型,泛型只是引用类型,并不是基本类型),直接打印ArrayList集合来说,打印的不是地址,而是内容  如果内容为空,是[]   .add向集合添加元素   .get从集合中获取元素   .remove在集合中删除元素    .size集合长度   如果集合ArrayList当中存储基本类型数据,必须使用基本类型的包装类  int(自动装箱)---->Integer (自动拆箱)--->int    char--->Character
程序当中所有双引号字符串都是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关键字,然后补上方法体和大括号),创建子类对象进行使用


 

你可能感兴趣的:(jvm,java,开发语言)