Java基础_基础语法知识6
面向对象
1.面向对象编程中成员变量与局部变量
(1).一个面向对象中成员变量和局部变量的代码体现
public class Student {
private int a;
public void Test() {
//int b;
//System.out.println(b);//报错:需要初始化
int b;
b=0;
System.out.println(b);
}
}
//上面的代码中定义了一个类,然后这一个类中有一个int类型的a;
同时还定义了一个名为Test()的方法,里面定义了一个名为b的局部变量;
(2).成员变量和局部变量的区别
A:在类中的位置不同
成员变量:定义在类中方法的外面
局部变量:定义在方法内部或者是方法声明上
B:在内存中的位置不同
成员变量:栈内存
局部变量: 堆内存
C:生命周期不同
成员变量:随着对象的存在而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
D:初始化值不同
成员变量:有默认的初始化值(null,0)
局部变量:没有默认的初始化值,需要先定义,然后赋值,才可以使用。
//注意:成员变量和局部变量的名称可以一样吗?
可以,但是不建议这样写,访问的时候是先找小范围(局部变量),然后再找大范围。(成员变量)
(3).形式参数的问题
A:基本类型 形式参数的改变不影响实际参数
B:引用类型 形式参数的改变直接影响实际参数
代码测试:
public class Student {
/**
* 这是学生的睡觉方法
*
*/
public void sleep(){
System.out.println("这是学生的睡觉方法");
}
}
public class Test {
/**
* 这是学生测试方法
*
*/
public void Test(Student s){
s.sleep();
}
public static void main(String[] args) {
Student st = new Student();
Test ts = new Test();
ts.Test(st);
}
}
//如果一个方法的参数是一个引用类型,那么这一个时候参数需要的是这一个引用类型的实例化对象。
(4).匿名对象的概述和应用
A:什么是匿名对象?
所谓的匿名对象就是没有名字的对象,是对象的一种简化形式。
B:什么时候使用匿名对象?
a.当对象调用方法仅仅一次的时候,多次的时候还是创建对象好一点。
b.作为实际参数进行传递的时候
C:匿名对象的使用好处
匿名对象在调用完毕以后会被垃圾回收器,便于释放空间。
C:代码测试
public class Test {
/**
* 这是学生测试方法
*
*/
public void Test(Student s){
s.sleep();
}
public static void main(String[] args) {
//匿名对象的使用,作为实际参数传递进去
new Test().Test(new Student());;
}
}
//可见匿名对象就是只取创建对象的后面new的部分,不给这一个对象取名字。同样可以达到效果
2.封装
(1).private 关键字
使用概述:private意思是私有的,一般使用来修饰成员变量和成员方法的,被它修饰了以后,成员变量和成员方法只能够本类
去调用。
比较常见的应用:
就是在创建实体对象的过程中,成员变量还是用private修饰,并对外提供相应的公共方法(即:getXxx()/setXxx()方法)
(2).封装概述
封装就是指对外隐藏对象的属性和成员方法中流程的实现细节,仅仅对外提供公共的访问方法。
(3).封装的好处
提高了代码的复用性。只要创建对象,然后就可以去调用这一个对象中的方法。
提高了代码的安全性。对外只提供公共的访问方法,看不到里面的具体实现过程。
(4).封装的要求
将不需要对外提供的内容都隐藏起来。把属性隐藏(一般就是指成员变量以及部分的成员方法),并提供公共的访问方法。
(5).this关键字
this关键字代表的是所在类的当前对象的引用。就是说存在一个隐藏的对象,这一个对象不需要new出来的。我们要使用这一个
类中的成员变量或者是成员方法的调用的时候就可以使用这一个对象。
什么时候使用this方便?
A:局部变量隐藏成员变量,如开发中实体对象所需的setXxx()方法。
B:区别与父类继承中super关键字的使用方法。
(6).一个标准的学生类对象:
public class Student {
//姓名
private String name;
//年龄
private int age;
//性别
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
(7).面向对象构造方法以及格式
A:构造方法概述
所谓的构造方法就是给对象中的数据进行初始化。(如初始化String-->null,int-->0)
B:构造方法的格式
方法名与类名相同;没有返回值,但是没有void;也没有具体的返回值。
具体的格式就是:public 类名(){}
C:构造方法的注意事项
如果代码中没有给出构造方法,那么系统就会给出一个没有带任何参数的构造方法,简称无参构造:
如:Student st =new Student();new 后面的Student()就是表示在创建对象是时候调用无参构造来初始化对象。
如果代码中给出了构造方法(无论有参还是无参),那么系统就不会给出构造方法。
构造方法是可以重载的。(无参构造和带参构造)
D:带参构造使用代码举例:[*****]
public class Student {
//姓名
private String name;
//年龄
private int age;
//性别
private String sex;
//带参构造,表示构造方法是可以重载的,初始化的时候参数由这里传入,这一个时候我们提供了一个构造方法
//创建对象的时候就需要通过这一个新自己给的构造方法来实现对象的创建以及使用。
public Student(String name,int age,String sex){
this.name = name;
this.age = age;
this. sex = sex;
}
public static void main(String[] args) {
Student st = new Student("张三", 12, "男");
System.out.println(st.getName()+"---"+st.getAge()+"----"+st.getSex());
}
//输出结果:张三---12----男
(8).面向对象中的方法分类
A:按有误返回值分类
有返回值:
没有返回值
B:根据参数有误区分
有参数
没有参数
(9).static关键字[****]
A:static关键字引入概述
我们见到static关键字是在main方法中,static,表示的是静态的。主要是为了解决java中针对多个对象有共同是成员
变量的时候使用。也就是说如果一个对象被static修饰,那么这一个对象可以被其他类所使用。这样,这一个成员变量
就成了公用的了。如我们居住的星球,如果需要这一个字段,那么就该被定义为静态的,因为这一个值只有一个--地球
在计算机上面存储的时候只需要要开辟一个空间即可。
B:static关键字特点
a.随着类的加载而加载
b.被static修饰的成员变量或者是成员方法,可以通过类名.方法名或者是类名.对象名这样来调用。
c.被类的所有对象共享
这是我们使用static关键字的一个重要判断标准
d:优先于对象存在。也就是在new一个对象之前static修饰的方法或者是成员变量以经加载了。
C:stati关键字的使用注意事项
a:调用注意事项
在静态方法是不可以使用this关键字的。(因为它加载的时候类这一个类对象还没有加载,
就不存在this这一个隐藏对象了)
在静态的方法中,我们去调用是时候只可以访问到静态的方法和静态的成员方法。
D:静态变量和成员变量的区别
a:所属不同
静态变量:静态变量是属于类,是一个类变量。类存在就可以使用
成员变量:成员变量属于对象,只有穿件对象的时候才可以使用
b:存储位置不同(计算机内存)
静态变量:存储于计算机中的静态方法区
成员变量:存储于计算机中的堆内存
c:出现时间不同
静态变量:随着类的加载而加载,随着类的消失而消失
成员变量:随着对象的创建而产生,随着对象的销毁而销毁
d:调用不同
静态变量: 静态变量可以通过类名来调用,也可以通过创建对象的方式来调用(建议使用前一种)
成员变量:成员变量只能够通过创建对象来调用
3.main方法的详解
(1).格式:
public static void main(String[] args){
}
//详解:
public:公共的,一个权限修饰符。和private一样,但是public的权限开放程度最大。需要被java虚拟机调用,所以权限要大
static:静态的,不需要创建对象即可使用,方便jvm调用
void:表示没有返回值,jvm调用不需要返回值
mian:表示这一个引用程序的执行开始位置。一般的编程语言都需要一个开始位置,一般就是main()方法
String[] args:作为一个数组作为参数传递进去。这一个最开始的编程语言讲起,为了实现人机数据交互(键盘录入)所使用(了解)