1.java中的方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。 当我们需要这个功能的时候,就可以去调用。这样即实现了代码的复用性,也解决了代码冗余的现象。 (方法就是完成特定功能的代码块)(方法名需要满足"小驼峰命名法")
定义格式:
修饰符 返回值类型 方法名 (参数列表){代码(方法体)...return ; }修饰符:目前固定写法 public static返回值类型 用于限定返回值的数据类型方法名 一个名称,为了方便我们调用方法参数类型 限定调用方法时传入参数的数据类型参数名 是一个变量,接收调用方法时传入的参数方法体 完成功能的代码return 结束方法以及返回方法指定类型的值返回值 程序被 return 带回的结果,返回给调用者
方法定义注意事项:
方法不调用不执行
方法与方法是平级关系,不能嵌套定义
方法定义的时候参数之间用逗号隔开
方法调用的时候不用在传递数据类型
如果方法有明确的返回值,一定要有return带回一个值
2.方法重载:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
方法重载的特点 :返回值类型无关,只看方法名和参数列表 ;在调用时,虚拟机通过参数列表的不同来区分同名方法
方法重载的目的:为了提供这个方法的扩展性,同一个方法可以传递不同的类型,完成具体逻辑操作;
参数列表不同
:
可以有下面几种
1)
参数类型不同
2)
参数个数不同
3)
考虑参数的先后顺序不同
3.
Jvm内存分配:栈
,
堆
,
方法区
,
本地方法区
(
和系统相关
),
寄存器
(
和
系统相关
)
3.1栈内存
:
存储局部变量
(
在方法定义中或者方法声明上
),
局部变量跟方法有关的
;
方法进栈
,
方法调用完毕
,
里面局部变量随着调用结束
而消失
3.2堆内存
:
new
出来的东西
(
引用数据类型
)
存储在堆中
,
而且它是随着对象的创建完毕
,
产生堆内存空间地址值
!
3.3方法区
:
里面很多的区域
:class
字节码文件区域
---
存储字节码文件
---jvm
需要加载这个类
,
解析这个类所有的方法以及变量
(---
这个过 程"
反射技术
")
static
区域
:----
静态区域
--
存储跟
static
相关的一些方法以及变量等等
constant pooll:
常量池 里面存储常量相关的
3.4本地方法区
(
了解
):
和系统相关的
----->
创建系统资源完成系统相关的操作
3.5寄存器
(
了解
):
和系统
cpu
都有关系
:
电脑的核数
(16
核
/8
核的
)--
核数越大
,
高并发场景下
,
运行效率越高
;
4.数组:数组是一个容器,这个容器能够存储同一种类型的多个元素!数组既可以存储基本数据类型,也可以存储引用数据类型。
4.1定义:
数据类型
[]
数组名称
;
数据类型 数组名称
[] ;
//
举例
:
int[] arr;
定义一个
int
类型对数组
arr
变量
int arr[] ;
定义一个
int
类型
arr
数组
4.2创建数组---->对数组进行初始化(创建数组对象)----两种方式
1)
动态初始化:
初始化时只指定数组长度,由系统为数组分配初始值。
数据类型
[]
数组名称
= new
数据类型
[
数组长度
];
或者 数据类型 数组名称
[] = new
数据类型
[
数组长度
] ;*
举例
:
int[] arr = new int[3] ; //
系统就认为 容器里面存储
int
类型的数据
,
所以默认值
0*
或者
int arr[] = new int [3] ;
2)
![](https://img-blog.csdnimg.cn/5a09e31fdcec4b969e7daa42895f3230.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg4NDIzNA==,size_16,color_FFFFFF,t_70)
2)静态初始化:
初始化时指定每个数组元素的初始值,由系统决定数组长度。
数据类型
[]
数组名称
= new
数据类型
[]{
元素
1,
元素
2,
元素
3...};
推荐这个
数据类型 数组名称
[] = new
数据类型
[]{
元素
1,
元素
2,
元素
3...};
简写格式
数据类型
[]
数组名称
= {
元素
1,
元素
2,
元素
3...};
数据类型 数组名称
[] = {
元素
1,
元素
2,
元素
3...};
举例
int[] arr = new int[]{1,2,3} ;---->int[] arr = {1,2,3} ;
int arr2[] = new int[]{11,22,33} ;--->int arr2[] = {11,22,33} ;
4.3数组应用
(
遍历
/
最值
/
基本元素查找
)
4.3.1数组的遍历:
//[元素1, 元素2, 元素3, 元素4, ..., 元素n]
public static void printArray(int[] arr){
System.out.print("[") ;
//遍历数组
for(int x =0 ; x < arr.length; x++){
//如果是最大索引值
if(x == arr.length-1){
System.out.println(arr[x]+"]") ;
}else{
//中间元素
System.out.print(arr[x]+", ") ;}
}
}
4.3.2冒泡排序:
冒泡排序思想
:
两两比较
,
如果前面的元素比后面元素大
,
将前面的元素往后放
(
较大的值往后走
),
第一次比较完毕
,
最大值就出现在最大索
引处
;
依次这样比较
,
就可以得到一个排好序的数组
!
规律
:
两两比较
,
如果前面的元素比后面元素大
,
将前面的元素往后放
;
第一次比较
:
有
0
个不比
,
都得比
第二次比较
:
有
1
个不比
...
每次比较一次
,
下一次就减少一次比较的次数
最终比较的次数
:
数组长度
-1
次
public static void bubbleSort(int[] arr){
for(int x = 0 ; x < arr.length-1;x++){//比较的次数
//每次比较一次,下一次就减少一次比较的次
for(int y =0 ; y < arr.length-1-x;y++){
// 两两比较,如果前面的元素比后面元素大,将前面的元素往后放;
if(arr[y]> arr[y+1]){
int temp = arr[y] ;
arr[y] = arr[y+1] ;
arr[y+1] = temp ;}
}
}
}
4.4数组中常见的两个小问题
1)数组索引越界
ArrayIndexOutOfBoundsException
访问到了数组中的不存在的索引时发生。
2)空指针异常
NullPointerException
数组引用没有指向实体,却在操作实体中的元素时
5.面向对象
5.1:面向对象的思想特点
:
1)
更符合现实生活中的思想行为习惯
2)
让复杂的事情简单化
3)
角色发生了改变
:
从执行者
(
面向过程
)--->
变成指挥者
(
面向对象)
5.2:
面向对象的设计理念
:
不断的创建对象
,
使用对象
,
指挥对象做事情
!(
面对对象的宗旨
)
一直用的
Scanner:
键盘录入
Scanner sc = new Scanner(System.in) ;
//sc.nextInt() ; sc.nextLine();
sc.nextBoolean();
面向对象的三大特征:封装,继承,多态
6.类与对象关系 :
类:是一组相关的属性和行为的集合
对象:是该类事物的具体体现 举例: 类 学生 对象 班长就是一个对象
7.类:是Java语言中最基本的单元;能够描述现实世界事物的一组事物的属性和行为的集合!
类和现实世界事物是一一对应的关系;
举例
:
现实世界事物
---
学生事物
属性
:
学生的姓名
,
学生的年龄
,
学生的性别
....
行为
:
主要就是学习
使用
Java
语言来描述出来的学生事物
------>
定一个类
----
学生类
class Student{ // 定义类名 ; 见名知意 --- 满足标识符的规则// 描述学事物的属性 ---( 代码里面 ---> 成员变量 )// 成员变量 : 是在类中 , 方法外 !String name ;int age ;String sex ;// 描述学事物的行为 ----> 代码中书写 ---> 成员方法// 今天开始写成员方法 -- 之前怎么写 , 现在还怎么写 , 自己分析有没有具体返回值类型// 有没有参数 , 几个参数 ...// 去掉 static ( 一般类中的成员方法 : 称为 " 非静态方法 ")public void study(String className){ //JavaEESystem.out.println(" 正在学习 "+className) ; }}
一个基本类的标准写法:
class 类名{成员变量(私有化);构造方法:无参构造方法带参构造方法成员方法:(自定义的方法没有static关键字)getXxx()setXxx()
}
给成员变量赋值的方式
第一种:有参构造方法赋值。
Person p1 = new Person("李四", 11);
第二种:set方法赋值。
Person p = new Person();
p.setName("李四");
类的初始化过程 :
Student s = new Student(); 在内存中做了哪些事情 ?加载 Student.class 文件进内存在栈内存为 s 开辟空间在堆内存为学生对象开辟空间对学生对象的成员变量进行默认初始化对学生对象的成员变量进行显示初始化通过构造方法对学生对象的成员变量赋值学生对象初始化完毕,把对象地址赋值给 s 变量
8.对象:描述现实世界的具体事物!(具体事物的具体的属性和行为)
现实世界的事物
---
是很概括性的
;
学生事物
----->
姓名
,
年龄
,
性别
----
是谁
?
不知道
,
需要描述具体的事物
------>
具体学生 张三
25
男
/
李四
20
女
在代码中体现出来具体事物
----->
需要记住
Java
中的创建类对象的格式
类名 对象名
= new
类名
() ;
对象名
.
成员变量名
=
值
(
根据成员变量的类型赋值
);
访问成员变量 赋值
对象名
.
方法名
();
访问我们自己的定义的成员方法
,
去使用它
,
展示数据或者实现具体业务需求
8.1:匿名对象(没有名字的对象) (重点):
匿名对象的两种使用情况:
1)对象调用方法仅仅一次的时候
2)作为实际参数传递
描述具体事物
---java
代码 体现
类名 对象名 = new 类名() ;
new 类名().成员变量=赋值;
new 类名().成员方法 ;
9.
局部变量和成员变量有什么区别
?
1)
书写位置的区别
局部变量
:
在方法定义中或者方法声明上的变量
成员变量
:
类中方法外
!
实际开发中
:
根据具体的情况具体使用
,
范围越小越好
,
因为范围小
,
使用完
,
释放内存了
!
2)
内存位置不同
局部变量
:
在栈内存中
---
跟方法有关
(
方法进栈
)
成员变量
:
在堆内存中
---
跟对象有关
(
类名 对象名
= new
类名
();)
3)
生命周期不同
:
局部变量
:
随着方法调用而存在
,
随着方法调用结束而消失
成员变量
:
随着对象的创建而存在
,
随着对象的创建完毕后
,
使用完毕
(
访问成员变量
/
访问成员方法
)
之后等待
垃圾回收器空闲时候回收而消失
!(
不会立即释放
)
4)
初始化值不同
局部变量
:
在使用之前必须初始化
,
否则报错
成员变量
:
跟对象有关系
,
存在系统默认初始化
,
然后可以显示初始化 对象名
.
成员变量名
=
赋值
;
// 定义一个类class Variable{int num ;// 成员变量 类中方法外定义的public void show(int y){ // 局部变量 20// 局部变量int x = 100 ;//int x ; // 使用之前必须初始化 , 否则报错System.out.println(x+y);}}// 测试类public class VaribaleDemo {public static void main(String[] args) {// 访问 Variable 类中的 num 变量 以及访问 show 访问 ?// 类名 对象名 = new 类名 () ; 创建这个类对象Variable v = new Variable() ;System.out.println(v.num) ; // 系统默认初始化v.show(20) ;System.out.println("-----------------------");v.num = 100 ;// 给 num 成员变量显示初始化System.out.println(v.num);}}
10.形式参数是基本数据类型和引用类型(重点)的区别
形式参数如果是基本类型
,
形式参数改变不影响实际参数
(
包括特殊的应用
java.lang.String)
形式参数如果是引用数据类型
,形式参数的改变直接影响实际参数的;
10.1:如果形式参数是具体类型----->实际参数如何传递?
1)如果形式参数是具体类,调用这个方法,实际参数传递需要传递当前类的具体对象(在
堆内存中开辟空间)
2)如果是抽象类,由于抽象类不能直接实例化,所以要提供更具体的子类实例化;或使用匿名对象
3)如果是接口,由于接口不能直接实例化,需要用该接口多态的方法来实例化,间接的通过子实现类来实现实例化
格式:接口多态 对象名 = new 子实现类名();
11.封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式
11.1好处:
1)隐藏实现细节,提供公共的访问方式
2)提高了代码的复用性
3)提高安全性。
11.2封装原则:
将不需要对外提供的内容都隐藏起来。
把属性隐藏,提供公共方法对其访问。
private :
私有的
,
修饰的成员变量或者成员方法只能本类中访问
(
为了保证数据安全
)
private关键字的特点:
1)private可以修饰一个类中的成员变量,也可以修饰成员方法
2)被private修饰的成员变量或者是成员方法只能在本类中访问,外界不能访问(保证数据的安全性),什么时候将变量定义为成员变量-->如果该成员变量能够描述某个事物的属性的话,--变量就要定义为成员变量
2)被private修饰的成员变量或者是成员方法只能在本类中访问,外界不能访问(保证数据的安全性),什么时候将变量定义为成员变量-->如果该成员变量能够描述某个事物的属性的话,--变量就要定义为成员变量
12.this关键字
this的含义: 代表所在类的对象引用
加入
this---->
标准类的写法
(
描述学生事物
/
描述手机事物
)
JavaBean
规范
:
1)
类是具体类
class
类名
{}
2)
类的属性必须私有化
3)
类中必须提供
setXXX()/getXXX()
对成员变量的公共的访问方法
(
赋值
/
获取值
)
13.static关键字:可以修饰成员变量和成员方法
13.1static
关键字特点:
1)随着类的加载而加载
2)优先于对象存在
3)被类的所有对象共享
(这也是我们判断是否使用静态关键字的条件)
4)可以通过类名调用
13.2static
关键字注意事项:
1)在静态方法中是没有
this
关键字的
2)静态方法只能访问静态的成员变量和静态的成员方法
14.构造方法:给对象的数据进行初始化
14.1构造方法格式:
方法名与类名相同
没有返回值类型,连void都没有
没有具体的返回值
14.2构造方法注意事项:
如果你不提供构造方法,系统会给出默认构造方法
如果你提供了构造方法,系统将不再提供
14.3构造方法也是可以重载的