包和类
java八种基本类型
运算符
x++和++x
- x++:先赋值后加加
- ++x:先加加后赋值
+= -= /= *=
底层的话会涉及到一个类型强转 主要看的是前前面数据的类型
short a=10;
int b=20;
a+=b == a=short(a+b)
逻辑运算符
- &
两边同时为真则为真 - !
取反 - |
两边为假才为假 - ^
相同为false,不同为true - &&
全部为真才为真 - ||
全部为假才为假
三元运算符
关系表达式?表达式1:表达式2
- 如果关系表达式为真 则执行表达式1 否则执行2
运算符优先级
循环结构
- continue
跳过这个条件 继续执行循环 - break
结束循环
判断是否为质数
数组
静态初始化
- int[] array=new int[]{1,2,3};
- int[] array={1,2,3};
动态初始化
手动指定数组长度
int[] array=new int[长度];
数组默认初始化值
- 整数类型默认为0
- 小数类型默认为0.0
- 字符类型默认为’/u0000’ 空格
- 布尔类型 默认为false
- 引用数据类型:默认为null
获取数组长度
array.length:可以直接获取数组长度
快速获取数组的遍历方式
array.fori
数组越界
访问的数据不在数组范围内,则会出现数据索引越界
数组的内存图
JAVA内存分配
- 堆
方法运行时使用的内存 比如main方法运行,进入方法栈中执行
new出来的东西会在这块内存中开辟空间并产生地址
每个空间都有一个地址值 - 栈
存储对象或者数组,new来创建,都存储在堆内存
程序的主入口,比如main方法,开始执行时会进栈,代码执行完毕会出栈 - 方法区
存储可以运行的class文件 - 本地方法栈
- 寄存器
方法
什么是方法:方法是程序中最小的执行单元。
方法有什么用呢:将重复的代码或者独立功能的代码抽取到方法中。
方法的好处:提高代码的复用性和可维护性。
方法的格式
如何打包?如何调用?
- 方法定义
- 1.最简单的方法定义
- 2.带参数的方法
- 带返回值的方法定义和调用
pulic static void 方法名(){
方法体(就是打包的代码)
}//1.最简单的方法定义
pulic static void method(int num1,int num2){
int result =num1+num2;
System.out.println(result;
}//2.带参数的方法
//涉及到多个参数的时候调用方法的时候 必须传入的参数个数和定义的方法个数里的参数一一对应
//在method方法中定义了两个参数分别是num1和num2
//所以method(num1,num2)
pulic static 返回值类型 方法名(参数){
方法体;
return 返回值;
}
- 方法调用
- 在主函数下打出方法名();
- 调用方法名(参数值);
- 形参和实参必须一一对应
- 带返回值的调用
- 直接调用
- 赋值调用
- 输出调用
注意的是返回值是必须定义一个新的参数传参以后才能取出来
形参和实参
- 形参
全称为形式参数,是方法定义中的参数 - 实参
全称为实际参数,是方法调用中的参数
形参是方法声明中的变量,用于接收传递给方法的值。实参是在方法调用时传递给方法的实值。
方法的注意事项
- 方法不调用不执行。
- 方法和方法之间是平级关系,不能互相嵌套定义。
- 方法的编写顺序和执行顺序无关。
- 方法的返回类型为void,表示该方法没有返回值,没有返回值的方法可以省略return不写,如果要编写return,后面不能跟具体的数据,此时return表示的是结束方法。
- return语句下面,不能编写任何代码,因为无效
return关键字
- 方法没有返回值:可以省略不写,如果书写,表示结束方法
- 方法有返回值:必须要写.表示结束方法和返回结果
方法的重载
- 在用一个类中,定义了多个同名的方法,这些同名的方法具有相同的功能,比如都是求和。
- 每个方法具有不同的参数类型或参数个数,这些同名的方法,就构成的重载关系。
- 注意的是与是否有返回值无关
ruturn和break的区别
- break是结束一个循环
- return是结束一个方法,方法结束,执行权回到方法调用处
面向对象编程
类和对象
类:是共同特征的描述(设计图)
对象:是具体存在的具体实例
- 类
- 成员变量(代表属性,一般是名词)
- 成员方法(代表行为,一般是动词)
- 构造器
- 代码块
- 内部类
- 对象
如何得到类的对象
类名 对象名 =new 类名();
如何使用对象
- 访问属性:对象名.成员变量
- 访问行为:对象名.方法名()
封装(重要)
面向对象的三大特征:封装 继承和多态
private关键字
- 是一个权限修饰符
- 可以修饰成员
- 被private修饰的成员只能在本类中才能访问
set和get方法
- set是赋值方法 //在赋值的时候对输入的内容进行判断
- get是取值方法
this关键字
this.age
就会调用成员变量中的数据
成员变量和局部变量
- 成员变量
定义在方法外面 - 局部变量
定义在方法里面
局部变量是测试类中调用方法传递过来的数据
就近原则
如果成员变量和局部变量相同,则在调用的时候会选取最近的数值
构造方法
构造方法也叫构造器,构造函数
作用:在创建对象的时候给成员变量进行初始化
public class Student{
修饰符 类名(参数){
方法体;
}
}
//特点:1.方法名与类型相同 即Student
2.没有返回值类型
3.没有具体的返回值(不能用return)
标准的JAVABean
- 类名需要见名知意
- 成员变量使用private修饰
- 提供至少两个构造方法
- 成员方法
快捷方法 :
添加构造方法:alt+insert 选择第一个
添加set和get方法 alt+insert 选择第四个
插件:PTG 1s生成标准javabean
字符串(重要)
1.String
字符串的内容是不会发生改变的,他的对象是在创建后不能被改变的
java程序中所有字符串文字都被视为此类的对象
字符串的比较
基础数据类型:
int a=10;
int b=20;
sout(a==b); false
//
String a=new String();
String b=new String();
sout(a==b) false
//
String s1="abc";
String s2="abc";
sout(s1==x2); true
字符串比较方法
- Boolean equals(要比较的字符串) 完全一样才true //a.equals(b);
- Boolean equalsIgnoreCase(要比较的字符串) 忽略大小写的比较
想比较字符串的内容,就必须要使用String里面的方法
字符串获取索引
charAT:获取索引
数组和字符串索引的区别以及构造fori
- 数组:arr.fori
- 字符串:str.length().fori //从0开始
- str.lenght().forr //从倒着开始
StringBuilder
概述:看做是一个容器,创建之后里面的内容是可以变的
- 作用:提高字符串的操作概率
StringBuilder():创建一个空白可变字符串对象
StringBuilder(String str):根据字符串的内容,来创建可变字符串对象
StringBuilder sb=new StringBuilder("abc");
常用方法:
1.append():添加数据
2.reverse():反转内容
3.length() 返回长度
4.toString():转化为String
StringBuilder直接sout打印的是属性值
StringJoiner
- 与StringBuilder一样
- 提高字符串的操作效率
- JDK8出现
构造方法:
1.StrinJoiner(间隔符号)
2.StringJoiner(间隔符号,开始符号,结束符号)
成员方法:
1.add()
2.length()
3.toString()
字符串的原理
1.字符串存储的内存原理
- 直接赋值会复用字符串常量池中的
- new出来的不会复用,而是在堆中开辟一个新的空间
2.==号比较的到底是什么
3.字符串拼接的底层原理(重要)
- 等号的右边没有变量
根据java中的常量优化机制,编译时候s已经变成abc存储在常量池中 - 等号的右边有变量
其中s1先在常量池中创建,而s2首先是创建了一个StringBuilder使用append进行字符串拼接,然后再调用toString创建一个String类得到"abc",s3原理相同
注意:String 修改长度和增加长度非常消耗内存和资源,所以再进行字符串拼接的时候最好用StringBuilder.
4.StringBuilder提高效率原理图
5.StringBuilder源码分析
集合
为什么会有集合
在内存中申请一块空间用来存储数据,在Java中集合就是替换掉定长的数组的一种引用数据类型。
集合和数组的区别
-
长度区别
- 数组长度固定,定义长了造成内存空间的浪费,定义短了不够用。
- 集合大小可以变,用多少空间拿多少空间。
-
内容区别
- 数组可以存储基本数据类型和引用数据类型
- 集合中能存储引用数据类型(存储的为对象的内存地址)
- list.add(100);//为自动装箱,100为Integer包装的
-
元素区别
- 数组中只能存储同一种类型成员
- 集合中可以存储不同类型数据(一般情况下也只存储同一种类型的数据)
ArrayList
集合的创建:
ArrayList直接sout打印的是存储的数据内容
打印出来的数据会由[]包裹
泛型:用于限定集合的数据类型
ArrayList成员方法
增删改查
- b add() //默认为true,所以在实际情况中不管返回值,而是直接打印
- b remove()//删除的数据不存在返回false 成功的话返回被删除的数据
- E remove(int index) //删除指定的下标内容 与数组相同
- E set(int ,E) //用指定的元素替换此列表中指定位置的元素。
- E get() //返回此列表中指定位置的元素。
- int size() //返回此列表中的元素数。
集合的遍历
与数组相同 list.fori //自带list.size()
基本数据类型对应的包装类
- byte -Byte
- short-Short
- char-Character
- int-Integer
- long_Long
- float-Float
- double-Double
- boolean-Boolean
关于集合返回数值以及自定义类返回地址值的问题
首先我们要知道toString()作用是返回对应数值的字符串内容,在object类中的toString,直接打印对象的话返回的值全类名+@+对应的hashcode
一般情况下,打印对象的话一般返回的就是全类名+@+对应的hashcode这种形式,但是在ArrayList中因为分别继承了AbstractList类和AbstractCollection类,其中在AbstractCollection中重写了toString,从而输出的是数据。
在String中的toString也进行了重写,返回的是具体的属性值,也就是()中带的值
在一般情况下没有重写toString()的话,那么自定义的类,直接输出的话打印的是object中的toString()中的全类名+@+对应的hashcode,一般情况下会对toString进行重写
ArrayList的add()方法可以存储对象
JAVA中set和get方法
java 中 当定义了一个私有的成员变量的时候,如果需要访问或者获取这个变量的时候,就可以编写 set 或者 get 方法去调用,set 是给属性赋值的,get 是取得属性值的,被设置和存取的属性一般是私有主要是起到封装作用不允许直接对属性进行操作
static静态变量
-
被static修饰的成员变量,叫做静态变量
- 特点:该类被所有对象共享
- 不属于对象,属于类
- 静态变量是随着类的加载而加载的,优先对象出现的
- 调用方式:
- 1.类名调用(推荐)
student.xxx="xxxx"
- 2.对象名调用
static内存图
-
被static修饰的成员方法,叫做静态方法
- 特点:1.多用于测试类和工具类
- 2.javabean中很少使用
常见的类
- javabean类:用于描述一类事物的类,如Student,dog,cat
- 测试类:程序的入口,一般带有main方法
- 工具类:帮助我们做一些事情,但是不描述任何事情的类
1.私有化构造方法,使得无法构造对象
2.所有方法都是静态的