1.对象
对象是事物存在的实体,通常又会将对象划分为两个部分,对象的属性和对象的行为
2.类
类就是一类事物的总称,如果将某个事物抽象为对象,那么类就是这个对象的总称
xx类-----实例化------->xx对象
类是封装对象的属性和行为的载体,对象则是类的实例。
3.面向对象程序的特点:封装,继承,多态
封装
封装是面向对象编程的核心思想,将对象的属性和行为封装起来,对使用者隐藏了数据的实现方式。
使用者只能通过对象的方法与对象数据进行交互,这样做的好处是当对象的数据方式发生改变时,只要仍然
是使用同样的方法来操作数据,则对其他的对象不会产生任何影响。
继承
有时候类与类存在一定的关联关系,常见的有:依赖(uses-a)、聚合(has-a)、继承(is-a)。
继承时is-a的关系,即当子类继承父类,子类就拥有了父类的属性和方法,而同时子类又能够去定义自己
特有的属性和方法,这样就能够复用父类的代码,缩短开发时间,提高系统性能。
多态
多态指的将父类对象应用于子类的特征,当父类中的某方法在子类中可能都有不同的实现,当用父类去实例化
子类并调用该方法时,只有在运行的时候才能知道调用的具体方法。
4.类的结构
public class Book {
private String name; //成员变量
private String price;//成员变量
/**
* 构造器:
* 构造器与类同名
* 每个类可以有一个以上的构造器
* 构造器可以有0个,1个,1个以上的参数
* 构造器没有返回值
* 构造器总是伴随着new操作一起调用
* 当类中没有构造方法是编译器会自动创建一个不带参数的默认构造方法,但如果类中存在有参的构造方法时,编译就不会去自动创建默认的无参构造方法*/
public Book(){
}
public Book(String name, String price) {
super();
this.name = name;
this.price = price;
}
/**
* 方法
* 权限修饰符 返回值类型 方法名(参数类型 参数名){
* //方法体
* return 返回值;(返回值类型为void时不需要)
* }
* @return
*/
public String getName() {
return name;
}
public void setName(String name) { //name 局部变量 ,方法执行时创建,方法结束时销毁
this.name = name; //this关键字:this引用的是本类的当前对象,this.name引用的是成员变量name
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
}
5.权限修饰符
| public | protected | 默认 | private | |
| 本类 | √ | √ | √ | √ |
| 同包类 | √ | √ | √ | |
| 子类 | √ | √ | ||
| 其他包类 | √ |
6.static关键字
static可以用来修饰成员变量和方法,被static修饰的成员变量称为静态变量,方法称为静态方法。
静态变量和方法在内存中只有一份,是属于类的,对象之间共享,通过类名.成员变量或者方法调用。
当成员变量被static和 final 修饰时被称为静态常量,常量不能被修改。
由于静态成员是属于类的,因此需要注意:
1.静态方法不能使用this关键字
2.静态方法不能直接调用非静态方法
3.方法体内的变量不能声明为static
static还有一个常见的用途就是Factory方法:
NumberFormat per = NumberFormat.getPercentInstance();
NumberFormat cur = NumberFormat.getCurrencyInstance();
double d = 0.2;
System.out.println(per.format(d));//20%
System.out.println(cur.format(d));//¥0.20
Numberformat类使用factory方法产生不同风格的格式对象。
7.方法参数
当调用有参方法时,方法中的参数值是对传参的值的拷贝。
方法不能修改一个基本类型的参数
方法能够改变一个对象类型的参数的状态
方法不能实现让对象参数引用一个新的对象
public static void main(String[] args) {
//1
int i = 2;
changeValue(2);//方法中x复制了i的值,为2,方法执行结束x=6,但是i的值不变
System.out.println(i);//2
//2
Book b = new Book();
b.setName("Hello");
System.out.println(b.getName());//Hello
changeBookName(b);//方法中book复制了b的引用,因此b和book指向同一个对象。所以调用setName方法之后b的name值发生了改变
System.out.println(b.getName());//Hello,World
//3
Book b1 = new Book("hello","11");
Book b2 = new Book("world","22");
//方法中book1和book2分别复制了b1和b2的引用,方法运行完之后,book1和book2交换了引用地址,
//只能说明方法结束后book1和book2的引用对象发生了改变,并不影响b1和b2的值
switchBook(b1, b2);
System.out.println(b1.getName());//hello
System.out.println(b2.getName());//world
}
public static void changeValue(int x){
x = x*3;
}
public static void changeBookName(Book book){
book.setName(book.getName()+",World");
}
public static void switchBook(Book book1,Book book2){
Book temp = book1;
book1 = book2;
book2 = temp;
}
来源:https://www.cnblogs.com/yueguangmoliya/p/6706671.html