1.面向编程范式--面象对象三大特征
2.private实现的封装处理--getter setter
3.构造方法--this关键字
4.static关键字
每个对象--类
属性以及方法
OOA: 面向对象分析
OOP:面向对象编程
OOD:面向对象设计
a.封装性:将客观事物封装为抽象的类,每个类都有自己的属性与方法,并且类可以让自己的数据与方法只让可信的类或对象操作,对不可信的进行信息隐藏。内部操作对外部不可见(保护性)。
b.继承性:可以使用现有类的所有功能,并且在无需重新编写原有类代码的情况下进行功能上的扩展。
c.多态性(*****):指一个类实例的相同方法在不同情形下有不同的表现形式。
多态机制使得具有不同内部结构的对象可以共享相同的外部接口。(利用多态可以得到良好的设计)
类是生产对象的蓝图,先有类才可以产生对象。对象的所有属性和行为,一定在类中进行了完整定义。
class 类名称{
属性1;
属性2;
..
方法1(){}
方法2(){}
...
}
类中的属性与方法(不带static关键字的)只能通过对象调用
对象产生语法:
类名称 对象名称 = new 类名称();
对象内存分析
栈内存(虚拟机局部变量表):存放的是局部变量(各种基本数据类型,对象引用--对象名字)
堆内存:保存对象。
new表示在堆上新分配了空间。
垃圾空间:没有任何栈内存指向的堆内存空间。
面向过程编程范式(c)-吃狗粮
面向切面编程(EE-AOP)
面向接口编程--接口优先原则
函数式编程 --Scala(JVM)
() -> {}
将属性与方法用private封装后表示,被封装的属性与方法只能在本类中使用,在类外部不可见。
此时要想访问被封装的属性,必须提供getter与setter方法。
setter方法:主要进行属性内容的设置与修改。
getter方法:主要进行属性内容的取得。
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
}
类的设计原则:编写类的时候,没有额外说明,所有属性必须使用private封装(成员变量)
Person per2 = new Person();//person()--->构造方法
a.构造方法名称必须与类名相同
b.构造方法没有返回值类型声明
c.每个类中一定至少存在一个构造方法,如果没有明确定义,系统会自动生成无参构造。若在类中自定义了构造方法,系统就不会再
生成无参构造。
1.定义属性-》2.定义构造方法-》3.定义普通方法
执行构造函数时会先把类中的所有属性和她们的初始值扔到构造函数中。
3.4.1表示调用本类属性
3.4.2表示调用本类方法
3.4.3表示当前对象
解释:
3.4.1表示调用本类属性
补充:就近使用原则。找离同名最近的名字
public Person(String name,int age){
name = name;
age = age;
} //就近原则,错误
正确:只要在类中访问类的属性,一定要加上this关键字
public Person(String name,int age){
this.name = name;
this.age = age;
}
3.4.2表示调用本类方法
a.调用普通方法:this.方法名(参数)
当有类的继承关系时,表示本类方法一定要加上this关键字。
public void getPersonInfo(){
System.out.println("姓名:"+name+" 年龄"+age);
this.print(); //不写this也会自动生成
}
public void print(){
System.out.println("************");
}
b(*****).调用构造方法 this(参数)
Ⅰ。this调用构造方法必须放在构造方法首行。
public Person(){
System.out.println("*****");
}
public Person(String name){
// System.out.println("*****");
this();//调用本类无参的构造方法
this.name = name;
}
public Person(String name,int age){
//System.out.println("*****");
//this.name = name;
this(name);//调用本类有一个参数的构造方法
this.age = age;
}
Ⅱ。this调用构造方法不允许成环
3.4.3表示当前对象
class demo{
print(){
System.out.println(this);//这里this是demo1
}
}
public static void main(String[] args){
demo de = new demo();
demo1.print();
}
4.1 static变量--类属性(静态属性)
static属性称为类属性,保存在全局数据区(方法区--所有对象共享区域),通过类名调用,与对象实例化无关。
person.getcountry();
应用场景:
描述共享属性(所有对象具有相同的值:中国人共享属性就是国家)使用static属性(1%)
4.2 static方法--类方法(静态方法)
通过类名调用,与对象实例化无关。常见于工具类方法。
public static void fun(){} //person类
person.fun();//主类
注意:
1.在java中,static不能修饰局部变量
2.static和private均不能加在外部类之上,内部类可以。