一,java基础
1.常用cmd窗口操作
E: 切换到e盘
dir 查看当前路径下的内容
cd 目录 进入单级目录
cd.. 退回到上一级目录
cd 目录1\目录2\ 进入多级目录
cls清屏但不会退出当前目录
exit关闭cmd窗口
想要在任意目录下都可以打开指定软件可以把软件路径配置到环境变量中
2.java能做什么
桌面应用开发,(idea,clion,pycharm),企业级应用开发(访问量需求大,只有java和go语言)(微服务),移动应用开发(鸿蒙,android,医疗设备ct,B超), 科学计算(matlab(机器人),), 大数据开发(hadoop),做游戏(我的世界)
Java分类:javaSE桌面应用开发,javaME移动开发嵌入式开发(凉),javaEE服务器开发
3. Java的跨平台是通过虚拟机实现的,运行在虚拟机中,我们只要针对不同的操作系统,安装不同的虚拟机就可以了
JRE是java运行环境,由JVM,核心类库,运行工具组成
JDK是java开发工具包,jvm虚拟机,核心类库,开发工具。Jvm是java虚拟机,运行java程序的地方,核心类库有java已经写好的东西,可以直接用,开发工具有,Javac编译工具,java运行工具jdb调试工具jhat内存分析工具
JDK包含了JRE,JRE包含了JVM
4.
Java中的关键字全部小写
Class表示定义一个类,后面跟类名
字面量:整数字符串等,其中null不能直接打印,可以以字符串方式进行打印
‘\t’制表符,把前面字符串的长度补齐到8的倍数””+’\t’+””
5.
取值范围:0~255(十进制的情况)还可以用其他进制来表示,十进制的255对应16进制的FF
声音的存储涉及到声音的波形图
6.基本数据类型
如果要定义long类型的变量,要在数据后面加一个L作为后缀,float后面加F,
取值范围double float long int short byte
byte-short-int-long-float-double取值范围小的和取值范围大的进行运算,小的会先提升为大的再进行运算
byte-short-char在进行运算时都会直接先提升为int再进行运算
标识符:有字母数字下划线_和美元符$组成,不能以数字开头,不能是关键字,区分大小写小驼峰命名法:方法变量一个单词全小写,两个及以上从第二个开始首字母大写
类一个单词首字母大写,多个单词每个首字母大写
7.
Idea中的结构:项目project模块module 包package类class
6.
原码:十进制数据的二进制表现形式,最左边是符号位,0为正,1为负
原码的弊端:利用原码进行计算的时候,如果是正数完全没有问题,但如果是负数,结果就会出错,跟正确的运算方向是相反的
反码出现的目的:解决原码不能计算负数的问题
反码计算:正数的反码不变,负数的反码在原码的基础上符号位不变,数值取反
反码的弊端:如果结果跨0,跟实际结果有1的偏差
补码出现的目的:解决负数计算不能跨0
补码计算规则:正数的补码不变,负数补码在反码的基础上+1,另外补码能多记录一个值-128,该数据在一个字节下,没有原码和反码
计算机中的存储和计算都是以补码的形式
7.
无限循环后面不能写其他代码,一个循环尽量只做一件事情
8.
方法是程序中最小的执行单元
重复的代码,具有独立功能的代码可以抽取到方法中,可以提高代码的复用性和可维护性
方法不调用就不能执行,方法与方法之间是平级关系,不能相互嵌套定义,方法的编写顺序与执行顺序无关
方法的重载:在同一个类中定义多个同名方法,这些同名方法具有同种功能,有不同的形参,与返回值无关。“
参数不同:个数,类型,顺序,顺序不同可以构成重载,但是不建议
9.“Return 和break 关键字的区别:
Return 跟循环没有什么关系,return 是跟方法有关系的,表示1结束方法2返回结果,如果方法执行到了 return,那么整个方法全部结束,里面的循环也随之结束“Break 跟方法没关系,是结束循环或者 switch 的
10.
New 出来的是堆内存,其他是栈内存。基本数据类型传递的是真实的值,引用数据类型开辟堆空间,传递的是地址值,堆空间发生变化会对其他的产生影响“
变量只在所属方法中有效“
二,面向对象
类(设计图)是对象共同特征的描述,对象是真实存在的具体东西,java中必须先设计类,才能活得对象
类可以放成员变量(属性,一般是名词),成员方法(行为,一般是动词),构造器,代码块,内部类只定义不给值
用来描述一类事物的类叫javabean类,javabean类中不写main方法,编写main方法的类叫测试类,可以在测试类中创建javabean类的对象并进行赋值调用。
类名首字母建议大写,需要见名知意,驼峰模式,一个java文件中可以定义多个类,且只能有一个类是public修饰,而且public修饰的类名必须成为代码文件名。但是实际开发中还是一个文件定义 一个class类
成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值,初始化值一般无需指定,存在默认值,其中,基本数据类型byte,short,int,long是0,float,double是0.0,boolean是false,引用数据类型类,接口,数组,String是null
面相对象三大特征封装,继承,多态。
封装:对象代表什么,就得封装对应的数据,并提供数据对应的行为
封装的好处:对象代表什么,就得封装对应的数据,并提供数据对应的行为。可以让编程变得简单,有什么事找对象调用方法就行,可以降低学习成本,不用急对象有哪些方法,有需要时去找就行。
private关键字是一个权限修饰符,可以修饰成员,被修饰的成员只有在本类中才能被访问,针对private修饰的成员变量如果要被其他类使用需要提供相应的操作,提供setXxx和getXcc方法用于赋值和获取值,方法用public修饰
构造方法方法名要与类名相同,没有返回值类型(没有void),没有具体的返回值(不能由return带回结果),创建对象的时候由虚拟机调用,不能手动调用构造方法,没创建一次对象就会调用一次构造方法。帮我们对成员变量赋值的,不用写set了。
如果没有定义构造方法,系统会给出一个默认的无参构造方法。如果已经定义了带参数的构造方法但没写无参构造方法,系统不再提供默认的无参构造方法,创建对象是由new关键字做的,虚拟机会自动调用构造方法给成员变量进行初始化。
构造方法也是可以重载的,方法名相同参数不同
标准的javabean类:类名要见名知意,成员变量用private修饰,至少提供两个构造方法(无参带全部参),成员方法要提供没一个成员变量对应的setXxx()和getXxx(),如果还有其他行为也要写上
内存首先main方法入栈,然后new出来的在堆内存开辟空间,新对象指向堆内存中的地址值。基本数据类型的数据值是存储在自己的空间中的,赋值给其他变量也是赋的真实的值,引用数据类型的数据值是存储在堆空间的,自己空间(栈里)存储的是地址值,新建的对象2也是指向堆中的空间
this的内存原理:作用是区分局部变量和成员变量,本质是所在方法调用者的地址值。
成员变量和局部变量的区别:成员变量是类中方法外的变量,有默认的初始化值,在堆内存中存储,随着对象的创建而存在,随着对象的消失而消失,在整个类中有效。局部变量是方法中的变量和形参,没有默认的初始化值(使用之前要赋值),在栈内存中存储,随方法的调用而存在,随方法的运行结束而消失,只在当前方法中有效
三,API&字符串
API是应用程序编程接口,是别人已经写好的东西,java API就是JDK中提供的各种功能的java类,这些类将底层的实现封装了起来
字符串的内容是不会发生改变的,它的对象在创建后不能被更改。
栈空间:方法运行的时候进栈,运行完毕出栈
堆空间:new出来的对象都在这里
方法区:临时存储字节码文件,class
StringTable串池:只有直接赋值的字符串在里面,new关键字获取的不再,jdk7之前在方法区,jdk7之后在堆空间,运行机制没变。
没有的话直接创建,有的话复用,会节约内存
==基本数据类型比较的是数据值,引用数据类型比较的是地址值。
字符串直接赋值会复用字符串常量池中的,new出来的不会复用,而是开辟一个新的空间。
==基本数据类型比较数据值,引用数据类型比较地址值
有变量参与的字符串拼接,jdk8以前用的stringbuilder
Tostring是new出来的一个string
Jkd8以后
先预估然后创建一个数组,预估也要时间,只要有变量参与就会有new的字符串产生
尽量用stringbuilder或者stringjoiner
Stringbuilder是一个内容可变的容器
容量是str.capacity