数组
1.理解数组
数组是用来存储相兼容数据类型的定长的容器
特点:
a.只能存放相兼容数据类型,不能存放多种数据类型
b.可以存放基本数据类型和引用数据类型
c.数组是定长的,一旦被初始化,数组的长度就不能发生改变
d.将数组中存储的数据称为元素
2.使用数组的好处:
可以自动给数组中的数据从0开始编号,方便操作这些数据,我们把这些编号叫做下标(索引)
3.定义数组
数组是一种引用数据类型
int x = 4;
int 是一种基本数据类型,int[]是一种引用数据类型,用来表示数组
int[] y = xxx;
方式一:数据类型[] 数组名称,例如:int[] x,String[] s
方式二:数据类型 数组名称[]
推荐使用方式一
数组的初始化
Java中的数组必须先初始化,然后才可以使用,所谓初始化,就是为数组中的每个数组元素开辟内存空间,并且为每个元素赋初始值
1.静态初始化
初始化的时候由程序员指定每个数组元素的初始值,交给系统去计算数组的长度(大小)
语法:元素类型[] 数组名称 = new 元素类型[]{元素0,元素1,元素2.。。。。。};
2.动态初始化
初始化是程序员只需要指定数组的大小(长度),对应的初始值由系统自行进行分配
语法:元素类型[] 数组名称 = new 元素类型[数组的长度];
系统对初始值的分配规则:
a.整型:0
b.浮点型:0.0
c.boolean:false
d.字符型:‘\u0000’(在不同的系统平台上的展示结果是不一样的,有的是方框(口),有的是空格)
e.引用数据类型:null
注意:在初始化数组时,静态初始化和动态初始化一定不要同时使用(在指定数组长度的同时,不要给数组中每个元素赋初始值)
数组初始化完成之后,就可以使用数组了,包括数组元素的访问,给数组元素赋值,获取数组的长度等
三、内存中的数组
数组是一种引用数据类型,数组元素和引用变量在内存中时分开存放的
数组引用变量存放在栈空间中,数组元素存放在堆空间中
栈:存放基本数据类型的变量和引用数据类型的引用
特点:被执行完成之后,函数或者变量所占用的空间会被销毁
堆:存放new出来的对象,例如:new出来的实际的数组元素
静态域:存放静态成员(static)
常量池:基本类型常量和字符串常量
二维数组
在一个一维数组中,数组的元素为一个数组
1.定义二维数组
int[] arr
语法:元素类型[][] 数组名称
面向对象编程
1.万物皆对象
案例一:我想吃大盘鸡
面向过程 面向对象
1.我自己去买一只鸡 1.委托一个会砍价的人去帮忙买鸡
2.我自己宰鸡 2.委托一个胆大的人宰鸡
3.我自己准备菜 3.委托一个厨师帮忙择菜
4.我自己做菜 4.委托一个厨师帮忙做菜
5.我自己吃 5.我自己吃
案例二:小明是一个电脑小白,想要配一台电脑,买完零件后需要搬到家里,组装起来开始玩游戏
面向过程 面向对象
1.小明补充电脑知识 1.委托一个懂电脑的朋友帮忙去买零件
2.小明去买零件 2,。委托一个快递小哥将零件搬到家里
3.小明将零件搬到家里 3.委托一个会组装电脑的人帮忙将电脑组装起来
4.小明组装电脑 4.小明开始玩游戏
5.小明开始玩游戏
面向过程和面向对象的区别:
面向过程:一种看待问题的思维方式,在解决问题的时候,着眼于问题是怎样一步一步解决的,然后亲力亲为的去解决每个步骤中遇到的问题
面向对象:一种看待问题的思维方式,着眼于找到一个具有特殊功能的具体的个体,然后委托这个个体去帮忙做某件事情,这个个体就被称为对象
区别总结:
a.都是一种看待问题的思维方式
b.面向过程着眼于所有的问题亲力亲为解决
c.面向对象着眼于找到一个具有特殊功能的对象,然后委托这个对象去帮忙做某件事情
Java语言是一门纯粹的面向对象的程序设计语言,类和对象是面向对象编程的核心
类和对象
1.类和对象的概念
类:一个具有特殊功能的实体的集合(群体)
对象:在一个类中,一个具有特殊功能的实体,能够帮忙解决特定的问题,对象也被称为实例
二者之间的关系:类用于描述某一类对象的共同特征,而对象则是类的具体存在(包含关系)
类 对象
人 张三,李四,杨阳,凌桃根......
快递 圆通、申通、顺丰、汇通......
superHero 蝙蝠侠,奥特曼,蜘蛛侠,美国队长......
我们可以将类当做是一种自定义的数据类型,可以使用类来进行定义变量,这种类型的变量统称为引用型变量,也就是说,类是引用数据类型
2.声明一个类
语法:访问权限修饰符 class 类名 {
//类体
}
说明:a.访问权限修饰符:只能是public(可以被省略)
b.类名只要是一个合法的标识符即可,要求:类名首字母必须大写,遵循驼峰命名法
c.类名尽量使用单个或者多个有意义的单词连接而成
注意:a.一个Java文件中可以同时存在多个类,如果有多个类的话,编译之后会生成多个class文件
b.一个Java文件中只能出现一个由public修饰的类,这个类的类名必须和Java源文件的名称保持一致
c.如果一个Java文件中只有一个类的话,并且这个类不使用public修饰,这时类名和Java文件名可以不一样
3.类中成员变量和方法的定义
1>成员变量
a.成员变量也被称为属性
b.成员变量其实就是全局变量
c.分为静态变量和非静态变量
d.在静态方法中只能访问静态变量,在非静态方法中可以访问静态变量和非静态变量
2>类中方法的定义
a.分为静态方法和非静态方法
b.在静态方法中只能调用静态方法,在非静态方法中可以调用静态方法和非静态方法
成员变量------类具有的特征,举例:人----身高,性别,三围,姓名。。。。
成员方法------类具有的行为,举例:人----吃喝玩乐......
4.对象的创建以及内存分析
对象的创建也称为实例化对象
语法:类名 标识符 = new 类名();
Person xiaoming = new Person();
说明:xiaoming这个变量是一个引用型变量,存放于栈空间中,实际的Person对象存放于堆空间中
所有new出来的对象全部存放于堆空间中,对应的对象的引用存放于栈空间中
5.类中成员变量和方法的访问
总结:a.静态成员变量和静态方法是属于类的,使用 类名. 的方式访问
b.非静态成员变量和非静态方法是属于对象的,使用 对象. 的方式访问
c.开辟空间的时机是不同的
6.方法重载
在同一个类中,如果满足以下的条件时,我们就称为这几个方法之间彼此重载
a.方法名相同
b.参数不同(数量不同,类型不同)
c.跟返回值类型没有关系
7.构造方法
构造方法也叫作构造器,是当实例化一个对象(创建一个对象)的时候,第一个被调用的方法
语法:访问权限修饰符 类名() {
}
普通方法:
访问权限修饰符 其他的修饰符 返回值类型 函数名(参数列表) {
}
注意:a.构造方法是在实例化对象的过程中自动调用的
b.系统会默认为我们提供一个无参的构造方法
构造方法和普通方法的区别
a.构造方法没有返回值
b。构造方法的方法名必须和类名保持一致
使用构造方法的过程中容易出现的问题;。
a.如果没有写有参的构造方法,系统会为我们提供一个默认的无参的构造方法
b。如果手动写了有参的构造方法之后,系统将不再提供无参的构造方法,如果需要使用,则需要手动加上(要求:一般情况下,将无参的构造方法加上,哪怕方法里面什么都不写)
面向对象语言的三大特性;封装、继承、多态
1.封装
一个类中某些属性,如果不希望外界直接访问,我们可以将这个属性作为私有的,可以给外界暴露出来一个访问的方法
使用封装解决私有化的问题
私有化使用private关键字
2.private的使用
1>修饰成员变量,表示这个成员变量只能在当前类中被访问
2>修饰成员方法,表示这个方法只能在当前类中被调用
3.get/set方法
对于private修饰的成员变量,如果要在外界使用,则使用get和set方法进行取值和赋值
语法
get------获取值
访问权限修饰符 返回值类型(成员变量的类型)getXxx() { 例如:public int getAge() {}
}
set-----赋值
访问权限修饰符 void setXxx(成员变量类型 变量名称) { 例如:public void setAge(int a){}
}
4.this关键字
this表示的是对当前对象的引用
1>this.属性:访问本类中的成员变量
总结:一般情况下,当私有变量的set方法中参数名称和成员变量相同的时候,使用this进行区分,有参构造方法中也是同样的道理(当局部变量名和成员变量名相同时,this表示的是成员变量名)
2>this.方法:访问本类中的方法
3>this():访问本类中的构造方法
注意:a.this()只能写在构造方法中
b.this()只能出现在其他构造方法中执行语句的第一行
c.this()具体调用的是哪个构造方法,取决于所传的参数
5.static关键字
1>静态成员变量
由static修饰的成员变量被称为静态成员变量
语法:访问权限修饰符 static 数据类型 变量名称;
特点:
a.静态成员变量是属于类的,通过 类名. 的方式和 对象.的方式都可以进行访问
b。静态成员变量的声明出现在实例之前(静态成员变量随着类的字节码文件加载到JVM中,且只会加载一次)
c.使用类和不同对象访问的静态成员变量都属于同一块内存空间
2>静态方法
特点:
a.静态方法是属于类的,通过类名.的方式访问
b.静态方法优先于实例被加载到JVM中,与静态成员变量类似
c.在同一个类中,静态方法只能访问静态方法
什么时候使用静态?
当所有的对象需要共享数据的时候,就定义成静态成员变量----静态成员变量
对于一些普遍或者需要多次使用的功能,我们将它抽取成方法的时候就声明成静态方法
3>静态代码块
什么是代码块?
在类中独立存在的语句块,可以有多个,位置随意{}
什么是静态代码块?
被static修饰,直接出现在类中的语句块
语法:static {
//执行语句
}
用法:a.静态代码块用于为类的属性进行初始化
b.静态代码块是属于类的,随着类的加载而运行,每个静态代码块只会执行一次,静态代码块的执行优先于main函数
扩展:
4>普通代码块:在方法或者语句中出现的{}
普通代码块和一般语句的执行顺序由他们在代码中出现的顺序决定
5>构造代码块:直接在类中定义,且没有加static关键字的代码块
6.包(package)
用来组织文件而存在的,和文件夹的功能相同
语法:package xx.yy.zz ---->class文件的存放位置
编译命令:javac -d . Java源文件名称(只要类中使用了package关键字)
注意:a.类编译生成的class文件存在于对应的包下
b.一般情况下,不同的类编译生成的class文件必须存在于同一个包下才能相互访问
c.当不同类的class文件存在于不同包下的时候,要相互访问,则使用import,格式:import 包名.文件名称
API,String类的概述和构造方法
String类的判断功能:equals()判断字符串相等,
equalsIgnoreCase()忽略大小写判断,
startWith()判断字符串是否以指定的str开头),模拟用户登陆
String类的获取功能:length()字符串长度
charAt(int index)获取指定索引出的字符
indexOf(String str)获取str在字符串对象中第一次出现的索引
substring(int start)从start开始截取字符串
substring(int start,int end)从start开始到end结束截取字符串,包括start不包括end
字符串遍历
String类的转换功能:char[] toCharArray()把字符串转换为字符数组
toLowerCase()转换为小写
toUpperCase()转换为大写
String类的去空格和分割功能:trim()去左右两边的空格
spilt(String str)按照str分割字符串
String类的反转功能:reverse()把字符串反转
StringBuilder的添加功能和反转功能:append()追加字符串
reverse()反转字符串
对象数组(把对象存到数组中)
集合类ArrayList
add()向集合中添加元素
add(int index,E element)在指定的索引处添加一个元素
get(index)得到一个索引处的值
size()获取集合(数组)长度
remove(值)删除一个值,返回布尔
remove(index)返回删除的值
set(index,新的值)修改集合数据 |
|