Java学习草稿笔记

本文介绍了Java中的类型转换,包括拓宽和窄化基本类型转换,以及一元和二元数字提升。详细讲解了数组、方法重载、递归的概念和应用。同时,提到了逻辑控制结构如if语句,以及字符串和数组的初始化与使用。此外,文章还讨论了对象的构造、封装原则,以及继承、抽象类和接口在面向对象编程中的作用。最后,提到了String类的一些常用方法,如转换大小写。
摘要由CSDN通过智能技术生成

类型转换

1.拓宽基本类型转换

2.窄化基本类型转换

一元数字提升

将byte、short、char类型的一元数字自动提升为int类型(拓宽)

  • 数组的索引、创建数组时的数组长度

  • 一元运算符+

  • 一元运算符-

  • 按位取反(-)

  • 位移(<<、>>、>>>)

  • 二元数字提升

    提升一个或两个数字(拓宽)

    1. 如任意一个数字是double类型,那么另一个就会被转换为double类型

    2. float--转换为float

    3. long转换为long

    4. 否则,两个数字都被转换为int类型

      下列情况会执行二元数字提升

      乘除取余、加法减法、比较、判等、位运算、三目

      方法重载

      栈帧

      随方法的调用而创建,方法结束销毁,存储了方法的局部变量信息

      递归调用

      递归调用不终止将会一直消耗栈空间,最终导致内存溢出

      必须要有一个明确的结束递归的条件,边界条件、递归基

      变量

      *在Java当中 没有所谓的无符号数字

       

       

当赋值的字面值大于这个变量能够保存的最大值时,程序会编译报错

 

byte--字节类型

 

short--短整型

 

long--长整型

浮点型

 

 

“0”,这个和浮点数的存储是有关系的

精度:float 小数点后6位

double 会存在一定的精度误差,浮点数是个近似值,并不是精确值

  1. 运行一个程序时,调用了才能运行

Unicode字符集:支持更多国家的语言(英文、希腊文)

4、字符串类型

C语言没有字符串类型

逻辑控制

顺序结构:按照代码结构一行一行执行

选择结构

if(布尔表达式){

//语句1

}else{

//语句2

}

1、运算符。 >>> 无符号右移 右移补0

2、逻辑控制-》if语句

 

 

break:让循环提前结束

continue:跳过这次循环,立即进入下一次循环

方法

 

 

方法重载

方法重写与重载的区别:

重载:

1、方法名称必须一样

2、方法的参数不一样{数据类型、个数、顺序}

3、返回值没有要求

递归

1、每次递归的时候,这个方法只执行了一部分,就去执行另一部分了

2、归的时候,会把当前方法剩余部分执行完毕

3、递的次数和归的次数是一样的

二叉树-》天生就是用递归来实现的

数组的初始化

数组的初始化主要分布为动态初始化和静态初始化

1、动态初始化:在创建数组时,直接指定数组中元素的个数

int[] array = new int[10];

2、静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定

语法格式:

T[] 数组名称 ={data1,data2,data3, ... ,};
int[] array1 ={0,1,2,3,4,5,6,7,8,9};
double[] array2 =new dounle[]{1.0,2.0,3.0,4.0,5.0};
String[] array3 =new String[]{"hello","JAVA","!!!"};

注意事项

1、静态初始化虽然没有指定数组的长度,编译器在编译时会根据{}中元素个数来确定数组的长度。

2、静态初始化时,{}中数据类型必须与[]前数据类型一致。

3、静态初始化可以简写,省去后面的new T[]。

如果数组中储存元素类型为引用类型,默认值为null

数组的使用

数组在内存中是一段连续空间,空间的编号都是从0开始的,依次递增,该编号称为数组的下标,数组可以通过下标访问其任意位置的元素。

for each 增强for循环

//  数组当中数据的类型定义的变量 : 数组名
for (int x : array1){
    System.out.print(x+" ");
}
System.out.println();

*JAVA当中有 一个工具,可以专门用来操作数组,这个工具叫做Arrays.

//把数组转变为字符串,然后返回

String ret =Arrays.toString(array1); 

一个引用不能指向多个对象

数组排序(冒泡排序)

给定一个是古族,让数组升序(降序)排序

假设排升序:

1、将数组中相邻元素从前往后依次进行比较,如果前一个元素比后一个元素大,则交换,一趟下来后最大元素就在数组的末尾。

2、依次从上述过程,直到数组中所有的元素都排列好

数组指针:指向数组的指针

指针数组:存放指针的数组

数组指针数组:存放数组指针的数组

类和对象

注意事项

1、一般一个文件当中只定义一个类

2、main方法所在的类一般要使用public修饰注意:Eclipse默认会在public修饰的类中找main方法

3、public修饰的类必须要和文件名相同

4、不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改

当成员变量没有初始化的时候,默认值就是对应的初始值。

引用类型-》null

this引用

this引用指向当时对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。

只不过所有的操作对用户都是透明的,即用户不需要来传递,编译自动完成。

this引用的特性

1、this的引用类型:对应类型的引用,即哪个对象调用就是哪个对象的引用类型。

2、this只能在“成员方法”中使用。(静态成员方法不能使用)

3、在“成员方法”中,this只能引用当前对象,不能引用其他对象。

4、this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收

对象的构造及其初始化

构造方法:名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。(没有返回值,类名和方法名一样)

当构造方法调用完成滞后,对象才实际上产生了。

特性:

1、名字必须与类名相同

2、没有返回值类型,设置为void也不行

3、创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次。

4、构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)

this(...)必须是构造方法中第一条语句

不能形成环

初始化所分配的空间

即:对象空间被申请好之后,对象中包含的成员已经设置好了初始值。

注意:代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造函数中。

封装(套壳屏蔽细节)

面向对象程序三大特性:封装、继承、多态。

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口和对象进行交互。

访问限制符

JAVA中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用。

JAVA中提供了四种访问限定符:

 

 

static成员

Student类中定义的成员变量,每个对象中都会包含一份(称之为实例变量)

static修饰的成员变量,称为静态成员变量(不属于某个具体的对象,是所有对象所共享的)

【静态成员变量的特性】

1、不属于某个具体的对象,是类的属性,所有对象共享的,不存在某个对象的空间中

2、既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问

3、类变量存储在方法区当中

4、生命周期伴随类的一生

static成员变量初始化

注意:静态成员变量一般不会放在构造方法初始化,构造方法中初始化的是与对象相关的实例属性。

静态成员变量的初始化分为两种:就地初始化 和 静态代码块初始化。

内部类

实例内部类、静态内部类、局部内部类

在外部类中,内部类定义位置与外部类成员所处的位置相同,因此称为成员内部类。

可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类。

一个类对应一个字节码文件

【注意事项】

1、局部内部只能在所定义的方法内部使用

2、不能被public、static等修饰符修饰

3、编译器也有自己独立的字节码文件,命名格式:外部类名$数字内部类名字.class

4、几乎不会使用

继承和多态

继承:就是对共性的抽取,从而达到对代码的复用【重复使用】

私有的成员 可以被继承 但是不能访问

【注意】

1、子类会将父类中的成员变量或者成员方法继承到子类中了

2、子类继承父类之后,必须要新添自己特有的成员,体现出与基类的不同,否则就没有必要继承了

抽象类和接口

抽象类 使用abstract修饰类

抽象类当中 可以包含普通类所能包含的成员

抽象类和普通类不一样的是,抽象类当中可以包含抽象方法

抽象方法是用abstract修饰的,这个方法没有具体实现

不能实例化抽象类 new

抽象类存在的最大意义就是被继承

如果一个普通类继承了一个抽象类 此时必须重写抽象类当中的方法

如果一个抽象类A 继承了一个抽象类B,此时A当中不需要重写B中的抽象方法,但是如果A再被普通类继承,就需要重写。

抽象方法不能是私有的。也就是要满足重写的规则。

抽象方法不能被final和static修饰,因为抽象方法要被子类重写

抽象类当中 可以有构造方法。为了方便子类能够调用,来初始化抽象类当中的成员。

String字符串

String ret = str.toUpperCase();//转成大写
String ret2 = str2.toLowerCase();//转成小写

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值