大学学习了很多语言,比如c,c#,java,python,android,等到本科要毕业了,选个方向做下去,觉得还是java比较现实一点,未来再考虑其他方向的问题。我决定要定期更新java有关的知识,做成一个系列。
1.软件:ideaIU-2017.3.4
2.小常识:
目录
自动生成getter,setter代码,以及构造方法,constructor,
-
如何更改软件内的字体
有时候容易把窗口的各个界面搞混,弄乱,可以恢复默认窗口布局
右下角有窗口开关按钮
如果窗口是悬浮的,在window里active那里关闭窗口悬浮模式,同时提示各个窗口的名字
2,如何创建快捷键
常用的一些快捷键
alter+i (insert)快速生成构造体,可以有参,也可以无参
ctrl alt v,这个快捷键最好,当你new a()对象时,会自动补充前面的对象名,并自动起名字,可以自定以快捷键
如何快速展开项目中的所有文件?
选中项目,按着向右箭头,按一次展开一层,一直按着,一直展开,同理向左按住,收回展开
ctl shift enter自动在行末加分号
shift+f6选定某个名称,可以重新为其命名
ctrl c v可以直接复制一个类进行重命名
导入一个moudle
java方法的概念
方法就是若干功能集合,最终为实现某个功能而存在
修饰符 返回值类型 方法名(参数列表){
//代码省略...
return 结果;
}
方法重载
方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。
参数列表:个数不同,数据类型不同,顺序不同。
重载方法调用:JVM通过方法的参数列表,调用不同的方法。
数组
数组初始化
第一种方式:
数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];
注意:数组有定长特性,长度一旦指定,不可更改。
第二种方式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
第三种方式:
数据类型[] 数组名 = {元素1,元素2,元素3...};
数组有属性.length得到数组长度,最大索引为.length-1
数组地址
【数字类型 I int@16进制
初始化默认值
java内存管理
程序需要在内存中运行,因此就需要进行管理这种资源
数组赋值
java文件被编译成字节码文件class,class进入方法区,内存中开辟方法区空间
方法区找到main方法压栈,
开始创建数组,堆中开辟空间存储对象,返回数组首地址
索引数组数据时根据数组名代表的首地址进行偏移操作
数组异常
索引越界异常,空指针异常
面向对象
类
类:是一组相关属性和行为的集合。可以看成是一类事物的模板
属性:就是该事物的状态信息。
行为:就是该事物能够做什么
public class ClassName {
//成员变量
//成员方法
}
对象
对象:是一类事物的具体体现
面向对象思想,思想若通,语言即通
类名 对象名 = new 类名();
类的创建与使用
java文件编译成class文件,class文件进入方法区,内存中为方法区开辟空间
main方法压栈
实例化对象A,对象进入堆空间中创建,对象的成员属性在堆中,对象的方法依旧在方法区中,方法区返回对象方法的地址存储在堆中
A调用成员方法,先进入堆中找到对象地址,然后再从堆中对象所存储的区域找到需要调用的成员方法地址,根据方法地址再去方法区中找到具体的方法执行
方法依次执行进行压栈操作,执行完后弹出方法栈,当main弹出时程序运行结束
压栈,出栈,方法去,堆,栈
两个对象.调用同一个方法,在堆中开辟两个对象空间,但是成员方法引用一个方法区
若对象相同,.堆中只开辟一个对象空间,两个对象操作的堆中的对象相同.
对象作为方法参数
将一个类实例化,作为方法的参数
.事实上对象名其实代表了地址值,传进去的对象参数也是地址值.
.数组也是如此
class文件进入方法区,main进入方法栈,new出的对象进入堆空间
成员方法本体在方法区,返回地址给对空间中的对象方法,.
对象作为返回值
.返回的实际是对象的地址值,根据地址当然可以找到对象的相关数据
局部变量与成员变量
在类中的位置不同 重点
成员变量:类中,方法外
局部变量:方法中或者方法声明上(形式参数)
作用范围不一样 重点
成员变量:类中
局部变量:方法中
初始化值的不同 重点
成员变量:有默认值,如int没有赋值默认为0
局部变量:没有默认值。必须先定义,赋值,最后使用
在内存中的位置不同 了解
成员变量:堆内存,对象所在位置,
局部变量:栈内存,方法所在位置
生命周期不同 了解
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
new对象时成员变量一同创建,在堆中
而局部变量,对着方法调用而在栈中创建
封装继承多态
private
赋值方法也会改变
因此具有了数据规范的能力
this的使用
表示本对象
构造方法
注意事项
1. 如果你不提供构造方法,系统会给出无参数构造方法。
2. 如果你提供了构造方法,系统将不再提供无参数构造方法。
3. 构造方法是可以重载的,既可以定义参数,也可以不定义参数。
自动生成getter,setter代码,以及构造方法,constructor,
标准代码——JavaBean
JavaBean 是 Java语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无参数的构造方法,提供用来操作成员变量的 set 和 get 方法。
此要求编写符合javabean规范的类
public class ClassName{
//成员变量
//构造方法
//无参构造方法【必须】
//有参构造方法【建议】
//成员方法
//getXxx()
//setXxx()
}
JavaAPI,预先写好的类
Scanner类、Random类、ArrayList类
scanner键盘输入
arraylist类似数组,但是实现了自扩容
使用API
查看类
java.util.Scanner :该类需要import导入后使用。
查看构造方法
public Scanner(InputStream source) : 构造一个新的 Scanner ,它生成的值是从指定的输入流扫描的。
查看成员方法
public int nextInt() :将输入信息的下一个标记扫描为一个 int 值。
使用scanner方法,查询api
匿名对象
概念
创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。而是直接使用了此对象
匿名对象 :没有变量名的对象。
没有把地址给出来
new 类名(参数列表);
例子 new Scanner(System.in);
一旦调用两次方法,就是创建了两个对象
匿名对象可以作为方法的参数和返回值
匿名对象作为方法的参数
匿名对象作为返回值
random
用于生成伪随机数。
查看类
java.util.Random :该类需要 import导入使后使用。
查看构造方法
public Random() :创建一个新的随机数生成器。
查看成员方法
public int nextInt(int n) :返回一个伪随机数,范围在 0 (包括)和 指定值 n (不包括)之间的
int 值。
指定范围生成
随机在0-2中生成一个数字
对象数组
对象数组
大小可变的数组的实现,大小也自动增长。
查看类
java.util.ArrayList <E> :该类需要 import导入使后使用。<E> ,表示一种指定的数据类型,叫做泛型。 E ,取自Element(元素)的首字母。在出现 E 的地方,我们使用一种引用数据类型将其替换即可,表示我们将存储哪种引用类型的元素。代码如下:
ArrayList<String>,ArrayList<Student>
查看构造方法
public ArrayList() :构造一个内容为空的集合
基本格式:
ArrayList<String> list = new ArrayList<String>();
在JDK 7后,右侧泛型的尖括号之内可以留空,但是<>仍然要写。简化格式:
ArrayList<String> list = new ArrayList<>();
对于元素的操作,基本体现在——增、删、查。常用的方法有:
public boolean add(E e) :将指定的元素添加到此集合的尾部。
public E remove(int index) :移除此集合中指定位置上的元素。返回被删除的元素。
public E get(int index) :返回此集合中指定位置上的元素。返回获取的元素。
public int size() :返回此集合中的元素数。遍历集合时,可以控制索引范围,防止越界。
装载基本类型
装载对象
String类、static、Arrays类、Math类
字符串
1. 字符串不变:字符串的值在创建后不能被更改。
string是一个对象,内部写有操作字符串的方法,比如比较,搜索,切割,大小写转换等等
String s1 = "abc";
String s2 = "abc";
// 内存中只有一个"abc"对象被创建,同时被s1和s2共享。
创建字符串的几种方法
空字符串,从字符数组创建,从字节数组创建
字符串比较原理与引用类型
如下比较的其实是引用类型的地址
常用方法
equals比较
因为变量可能会引发空异常,即变量可能不存在值
字符串常用方法
截取字符串
字符串的内容替换
字符串内容转化
CharSequenc 是一 个接口,也是一种引用类型。作为参数类型,可以把String对象传递到方法中。
字符串的分隔
static
关于 static 关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属于某个对象的。也就是说,既然属于类,就可以不靠创建对象来调用了。即可以直接调用
静态关键字,可以节省内存,共同属性,方便修改
版本号自动记录,或者创建的多少个对象自动记录
修饰成员变量用于共享内存,优化
static修饰成员方法
注意
静态方法只能访问静态成员,对于this和对象相关,而静态只与类相关
static在内存中的占用空间与位置
方法区里有一个特殊区域,相当于开小灶,静态区,.静态成员被放到了这里.
new出来的对象在堆当中.
当调用静态成员的时候直接去方法区中找参数名,找到后再去找静态区中看其存储的数据
即是使用对象调用,最后还是会被翻译成类调用
静态代码块执行一次
静态代码块:定义在成员位置,使用static修饰的代码块{ }。
位置:类中方法外。
执行:随着类的加载而执行且执行一次,优先于main方法和构造方法的执行。
常被用来初始化
static 关键字,可以修饰变量、方法和代码块。在使用的过程中,其主要目的还是想在不创建对象的情况下,去调用方法。
以下两个类是方法用静态方法写的,作为工具类被使用
arrays
字符串到字节一节排序案例
math方法
不必再手动声明了