java第二周学习笔记

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)

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){ //JavaEE
System.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修饰的成员变量或者是成员方法只能在本类中访问,外界不能访问(保证数据的安全性),什么时候将变量定义为成员变量-->如果该成员变量能够描述某个事物的属性的话,--变量就要定义为成员变量

 
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构造方法也是可以重载的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值