面向对象
类成员
1.成员变量
- 属性
- 数值类型的基本数据类型默认值是 0
- 成员变量在任何方法中都能访问,和声明先后没有关系
2.成员函数
方法
3.定义方式
class 类名{成员变量;成员函数} //首字符大写,$_开头
局部变量
- 定义在方法或者语句中,
- 没有默认的初始化值,必须手动初始化
堆
数组和函数在堆中
栈
方法在栈中
class ClassDemo1{
public static void main(String[] args){
//创建对象,p指向Person的内存地址
Person p = new Person();
p.run();
}
}
/**
*定义类
*/
class Person{
//成员变量===属性(property)===字段(field)
int height;//身高
int weight;
int age;
public void run(){
System.out.println("run...");
}
}
匿名对象
1.new Person().run();
2.作为参数进行传递
class ClassDemo1{
public static void main(String[] args){
//匿名对象
new Person().run();
}
}
/**
*定义类
*/
class Person{
//成员变量===属性(property)===字段(field)
int height;//身高
int weight;
int age;
public void run(){
System.out.println("run...");
}
}
-
匿名对象是对象的简化形式
-
匿名对象两种使用情况
-- 当对对象方法仅进行一次调用的时候
-- 匿名对象可以作为实际参数记性传递
构造函数
特点:
- 函数名与类名相同
- 不用定义返回值类型
- 没有具体的返回值
作用:给对象进行初始化
注意:
1. 默认构造函数的特点
2. 多个构造函数是以重载的形式存在的
对构造函数的几点解释:
1.函数名和类型相同
2.没有返回值
3.如果类没有定义构造函数,jvm分配一个空构造;如果类定义了构造函数,就没有空构造。
4.可以重载
5.创建对象时使用,如:new Car();
class ClassDemo1{
public static void main(String[] args){
Dog d2 = new Dog("white");
System.out.println(d2.getColor());
}
}
class Dog{
//成员属性
private String color;
private int age;
//构造函数
//空构造
public Dog(){
}
//只有一个参数的构造函数
public Dog(String c){
color = c;
}
public void setColor(String c){
color = c;
}
public String getColor(){
return color;
}
}
注意程序中构造函数传参的方式。
另外,构造函数可以有多个,只要参数不同就可以。下面给出三种不同的构造方式。
class ClassDemo1{
public static void main(String[] args){
//第一种构造函数创建对象的方式
Dog d1 = new Dog();
d1.setColor("black");
d1.setAge(1);
System.out.println(d1.getColor() + d1.getAge());
//第二种构造函数创建对象的方式
Dog d2 = new Dog("white");
System.out.println(d2.getColor());
//第三种构造函数创建对象的方式
Dog d3 = new Dog("yellow",2);
System.out.println(d3.getColor() + d3.getAge());
}
}
class Dog{
//成员属性
private String color;
private int age;
//构造函数
//空构造
public Dog(){
}
//只有一个参数的构造函数
public Dog(String c){
color = c;
}
//有两个参数的构造函数
public Dog(String c,int a){
color = c;
age = a;
}
public void setAge(int a){
age = a;
}
public int getAge(){
return age;
}
public void setColor(String c){
color = c;
}
public String getColor(){
return color;
}
}
构造代码块
1.创建对象的时候调用
2. 在构造函数之前
对象的创建过程:
- 1.先运行构造代码块
(从上到下,按序执行) - 2.运行构造函数
- 3.成员变量
--- 执行顺序:
a.color = null;如果没有赋值
b.color = "black";如果在类中赋了初值
c.构造代码块
d.构造函数
静态代码块 static{}
在类加载期间执行,而且只执行一次,也是从上到下按序执行。
由此,我们可以总结一下这些 类成员:
- 成员变量
- 成员函数
- 构造函数
- 构造代码块 { }
- 静态代码块 static{}:在类加载期间执行,而且只执行一次。也是从上到下按序执行。
-- 静态成员之间可以互相访问,按序执行。
-- 静态成员不可以访问非静态成员,
-- 可以访问静态成员,
-- 静态成员通过类访问(和对象无关。比如:Dog.blood)