第三章 第3节 面向对象进阶
封装意义:
封装的意义在于保护或者防止代码(数据)被我们无意中破坏。
保护成员属性,不类以外的程序直接访问和修改。
原则:隐藏对象的属性和实现细节,仅对外公开访问方法,并且控制访问级别
方法:setter,getter,在其中进行判断,
一般对所有属性进行private封装。
this 关键字:指的是当前对象
this.name = name
this.age = age
更容易见名知意,一 一对应。
在Java基础中,this关键字是一个最重要的概念。使用this关键字可以完成以下的操作:
· 调用类中的属性
· 调用类中的方法或构造方法
· 表示当前对象
如果在一个构造方法中调用了另一个构造方法,一定要写在第一行。
static 关键字:
静态修饰的方法,被调用时,有可能对象还未创建。
被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访
问。并且不会因为对象的多次创建, 而在内存中建立多份数据.
在访问时: 静态不能访问非静态 , 非静态可以访问静态 !
static 可以用来修饰 这个类都具有同一个值的属性,这样方便直接修改。例如:
你们班级的所有人,都是同一个学校同一个班级,比如说你把默认值设置成“北京小学001班‘,那如果你们班级或者学校改名了,总不能把默认值改了之后,再重新生成你们班所有学生,这时用static修饰这个属性,就可以方便的更改所有人的这个属性。见代码:
public class StudentTest {
public static void main(String[] args) {
Student.company = "xx公司";
Student.subject = "xx业务组";
Student student1 = new Student("小明");
Student student2 = new Student("小王");
Student student3 = new Student("小李");
Student student4 = new Student("老王");
// 输出个人信息
student1.say();
student2.say();
student3.say();
student4.say();
// 修改公司和业务
Student.company = "神马公司";
Student.subject = "神马业务组";
// 输出个人信息
student1.say();
student2.say();
student3.say();
student4.say();
}
}
public class Student {
private String name;
private String sex;
private int age;
private String hobby;
static String company;
static String subject;
// 无参构造方法,初始化为默认值
Student(){
this.name = "无";
this.age = 18;
this.sex = "男";
this.hobby = "无";
}
// 单参数构造方法
Student(String name){
this.name = name;
this.age = 18;
this.sex = "男";
this.hobby = "无";
}
// 描述个人信息
void say(){
System.out.println("----个人信息-----");
System.out.println("姓名:" + name);
System.out.println("年龄:" + age);
System.out.println("性别:" + sex);
System.out.println("爱好:" + hobby);
System.out.println("公司:" + company);
System.out.println("学科:" + subject);
}
}
/*
----个人信息-----
姓名:小明
年龄:18
性别:男
爱好:无
公司:xx公司
学科:xx业务组
----个人信息-----
姓名:小王
年龄:18
性别:男
爱好:无
公司:xx公司
学科:xx业务组
----个人信息-----
姓名:小李
年龄:18
性别:男
爱好:无
公司:xx公司
学科:xx业务组
----个人信息-----
姓名:老王
年龄:18
性别:男
爱好:无
公司:xx公司
学科:xx业务组
----个人信息-----
姓名:小明
年龄:18
性别:男
爱好:无
公司:神马公司
学科:神马业务组
----个人信息-----
姓名:小王
年龄:18
性别:男
爱好:无
公司:神马公司
学科:神马业务组
----个人信息-----
姓名:小李
年龄:18
性别:男
爱好:无
公司:神马公司
学科:神马业务组
----个人信息-----
姓名:老王
年龄:18
性别:男
爱好:无
公司:神马公司
学科:神马业务组
*/
同时,还适用于每次创建对象时要给它一个递增的编号,那就可以把编号用static修饰。
包:
不导包,可以用类的全名称
有些类不用导包就能用,比如 String等,这些是内置包。
权限修饰符:
常用的就是 public 和private
代码块:
普通代码块:
就是{}括起来的区域。
构造代码块:
在类中的成员代码块, 我们称其为构造代码块, 在每次对象创建时执行, 且执行在构造方法之前。
区别于构造方法的是:
无论用户调用哪一个构造方法来创建对象,构造代码块都必然执行。
静态代码块:
在类中使用static修饰的成员代码块, 我们称其为静态代码块, 在类加载时行。 每次程序启动到关闭 ,只会执行一次的代码块。
随着类的加载(第一次使用),静态代码块执行。因为类只加载一次,所以静态代码块只执行一次。
面试题:
构造方法 与 构造代码块 以及 静态代码块的执行顺序:
静态代码块 —> 构造代码块 —> 构造方法
main方法详解:
main()方法一直写到了今天:
public static void main(String args[])
以上的各个参数的含义如下:
· public:表示公共的内容,可以被所有操作所调用
· static:表示方法是静态的,可以由类名称直接调用。java StaticDemo09
· void:表示没有任何的返回值操作
· main:系统规定好的方法名称。如果main写错了或没有,会报错:NoSuchMethodError: main
· String[] args:字符串数组,接收参数的
演示:测试这段代码
public class Test {
public static void main(String[] args) {
for (String arg : args) {
System.out.println(arg);
}
}
}
String[] args 接收命令参数,什么也不输入,就什么也不输出,输入数字什么的,要用空格隔开,接收进来的就是一个字符串数组。
对于本来就有空格的字符串,要用””括起来,才能输出你想要的:
否则,输出的就是按空格分割的: