详解Java基础知识笔记五

文章资讯 2020-06-14 16:22:06

详解Java基础知识笔记五

文章目录一思想概述1.1面向过程1.2面向对象二两者的区别三类与对象四类的定义五类与对象的案例六对象内存图七成员变量和局部变量的区别八rivate关键字
一思想概述
1.1面向过程
1,因为面向对象思想是基于面向过程思想。回想一下之前,在做一些练习的时候,我首先得清楚,我需要做什么操作,然后在一步步分析要怎么做,最后用代码实现。需要面对每一个步骤和过程。
2,面向过程的代表语言:C语言
1.2面向对象
1,当需求单一或者简单时,我们一步一步的做是ok的,并且效率也挺高。但是随着需求的更改,功能的增多,发现需要面对每一个步骤就变得有些麻烦和繁琐了。所以我们要思索,能不能把这些步骤和功能在进行封装在一个类中,封装时根据不同的功能,进行不同的封装,同时功能类似的封装在一起。这就是面向对象思想。
2,面向对象的代表语言:Java语言
二两者的区别
1,通过一个案例看看它们的区别。
在控制台打印的数组格式为:[元素1,元素2,元素3,元素4,元素5….]
面向过程思想做法
ubcstaticvoidmain(String[]args){
创建数组
int[]arr={1,2,3,4,5};
调用方法
rintArr(arr);
}
ubcstaticvoidrintArr(int[]arr){
System.out.rint("[");
for(inti=0;i<arr.length;i++){
if(arr.length-1==i){
System.out.rintln(arr[i]+"]");
}else{
System.out.rint(arr[i]+",");
}
}
}面向对象思想做法
ubcstaticvoidmain(String[]args){
创建数组
int[]arr={1,2,3,4,5};
调用方法
rintArr(arr);
}
ubcstaticvoidrintArr(int[]arr){
借助了一个java中提供的对象
System.out.rintln(Arrays.toString(arr));
}2,总结:
面向过程强调的是每一个环节每一个步骤都需要自己去完成,比较复杂。
面向对象是根据Java中的一些类创建对象,让对象去帮我们调用方法完成,比较简单,
3,面向对象也有三个特征,即封装继承多态。
三类与对象
1,什么是类
类是一组属性和行为的集合,我们可以当做是某一类事物的模板,从而使用该事物模板的属性和行为来描述这一类事物。
2,现实中如何描述一类事物
(1)属性:就是该事物的状态信息
(2)行为:就是该事物能够做什么
3,举例:鳄鱼
属性:名字,颜色,体重,年龄行为:爬,吃,睡
4,什么是对象
对象是一类事物的具体体现。对象是类的一个实例,那么对象就必须具备该类事物的属性和行为。
5,现实中如何描述一个对象
举例:鳄鱼1号
属性:小黑,黑色,18kg,2岁行为:慢慢爬,吃肉,睁眼睡
6,类与对象的关系
类是对一类事物的描述,是抽象的。
对象是一类事物的实例,是具体的。
类是对象的模板,对象是类的实体。
四类的定义
1,现实世界的事物
(1)属性: 事物的描述信息
(2)行为: 事物能做什么
2.定义类其实就是定义类的成员
(1)成员变量:就是事物的属性
(2)成员方法:就是事物的行为
五类与对象的案例
1,学生类
ubcclassStudent{
Stringname;姓名
intage;年龄
ubcvoidstudy(){学习
System.out.rintln("学生正在学习Java");
}
ubcvoideat(){吃饭
System.out.rintln("吃鸡腿");
}
}2,使用
创建对象:类名对象名=new类名();
对象名.成员变量,对象名.成员方法
ubcclassDemoStudent{
ubcstaticvoidmain(String[]args){
Studentstu=newStudent();创建学生类的对象
System.out.rintln(stu);地址值
System.out.rintln("-----------------");
使用成员变量
System.out.rintln("姓名:"+stu.name);nl
System.out.rintln("年龄:"+stu.age);0
给成员变量重新赋值
stu.name="小明";
stu.age=18;
System.out.rintln("-----------------");
再次使用成员变量
System.out.rintln("姓名:"+stu.name);小明
System.out.rintln("年龄:"+stu.age);18
使用成员方法
stu.study();
stu.eat();
}
}六对象内存图
ubcclassPhone{
Stringand;
doublerice;
Stringcolor;
ubcvoidcall(Stringname){
System.out.rintln("给"+name+"打电话");
}
ubcvoidsend(){
System.out.rintln("给小明发短信");
}
}1,一个对象的内存图
ackagecom.baidu.demo;
ubcclassDemoPhone{
ubcstaticvoidmain(String[]args){
Phone=newPhone();
System.out.rintln(.and);
System.out.rintln(.rice);
System.out.rintln(.color);
.and="vivo";
.color="黑色";
.rice=2299;
System.out.rintln(.and);
System.out.rintln(.rice);
System.out.rintln(.color);
.call("小明");
.send();
}
}一个对象的基本初始化过程2,二个对象的内存图
ackagecom.baidu.demo;
ubcclassDemoPhone{
ubcstaticvoidmain(String[]args){
Phone1=newPhone();
1.and="华为";
1.rice=5000.0;
1.color="金色";
System.out.rintln("1的品牌:"+1.and);
System.out.rintln("1的价格:"+1.rice);
System.out.rintln("1的颜色:"+1.color);
1.call("李明");
1.send();
System.out.rintln("=========");
Phone2=newPhone();
2.and="魅族";
2.rice=6000.0;
2.color="黑色";
System.out.rintln("2的品牌:"+2.and);
System.out.rintln("2的价格:"+2.rice);
System.out.rintln("2的颜色:"+2.color);
2.call("小红");
2.send();
}
}方法的共用3,二个对象的内存图
ackagecom.baidu.demo;
ubcclassDemoPhone{
ubcstaticvoidmain(String[]args){
Phone1=newPhone();
1.and="vivo";
1.rice=2299.0;
1.color="黑色";
System.out.rintln("1的品牌:"+1.and);
System.out.rintln("1的价格:"+1.rice);
System.out.rintln("1的颜色:"+1.color);
Phone2=1;
2.and="VIVO";
2.rice=1799.0;
2.color="白色";
System.out.rintln("2的品牌:"+2.and);
System.out.rintln("2的价格:"+2.rice);
System.out.rintln("2的颜色:"+2.color);
System.out.rintln("1的品牌:"+1.and);
System.out.rintln("1的价格:"+1.rice);
System.out.rintln("1的颜色:"+1.color);
}
}两个引用指向同一个对象七成员变量和局部变量的区别
1,在类中的位置不同
成员变量:类中方法外.
部变量:方法内或者方法声明上
2,在内存中的位置不同
成员变量:堆内存
局部变量;栈内存
3,生命周期不同
成员变量:随着对象的存在而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
4,初始化值不同
成员变量:有默认的初始化值
局部变量:没有默认的初始化值,必须先定义,赋值,才能使用。
八rivate关键字
1,rivate关键字:是一个权限修饰符。可以修饰成员(成员变量和成员方法)
被rivate修饰的成员只在本类中才能访问。
2.rivate最常见的应用:把成员变量用rivate修饰,
提供对应的getXxx()setXxx()方法
3,案例的使用
通过对象访问成员变量,会存在数据不安全的问题。
我们应该想想能不能让用户对象其赋值的时候有一些限制。
rivate关键字,实现限定
rivate:是一个修饰符,可以修饰成员变量,也可以修饰成员方法如果成员变量或成员方法被rivate修饰,那么只能在本类中访问针对rivate修饰的成员变量,外界如果想要访问,我们必须在类中提供对应getXxx()setXxx()一组方法,方法必须是ubc
ubcclassStudent{
rivateStringname;
rivateintage;
ubcvoidshow(){
System.out.rintln("姓名是:"+name+"年龄是:"+age);
eat();
}
*rivatevoideat(){
System.out.rintln("吃肉肉..");
}*
ubcvoidsetName(Stringn){
name=n;
}
ubcStringgetName(){
turnname;
}
ubcvoidsetAge(inta){
if(a>100||a<0){
System.out.rintln("年龄不合法!!!");
}else{
age=a;
}
}
ubcintgetAge(){
turnage;
}
}学生的测试类
ubcclassDemoStudent{
ubcstaticvoidmain(String[]args){
创建学生对象
Studentstu=newStudent();
stu.show();
对成员变量进行赋值
stu.setName("小明");
stu.setAge(18);
stu.show();
也可以单独使用get方法获取成员变量的值
System.out.rintln(stu.getName());
}
}