一:对象的概念:
我们都说万物皆对象,客观存在的事物都是对象。
二:什么是面向对象?
把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。
既然在这里提到了类,那么类究竟是什么呢?接下来我们就来说什么是类。
三:什么是类?
简单点来说,类就是模子,确定对象将会拥有的特征(属性)和行为(方法)。
类的特点:1):类是对象的类型
2):具有相同属性和方法的一组对象的集合
类中具有属性和方法,那么接下来我们就来说一说类的属性和方法。
四:对象的属性--对象具有的各种特征。
就比如说手机有屏幕大小,CPU内存大小,内核等特征,也就是手机的属性
五:对象的方法--对象执行的操作
比如说手机又发短信,打电话的功能。那么发短信和打电话就是手机的方法
六:类和对象有什么区别?
类是抽象的概念,仅仅是一个模板,对象是一个实体。比如"手机"对象是一个你能够看得着,摸得到的实体。
下面,我们就看如何用代码来创建对象和类以及对象的属性和方法。
---------------------------------------------------------------------------------------------------------------------------------
1:定义类
主要包括三个步骤: 定义类名,编写类的属性,编写类的方法
public class Telphone{//定义类名
//属性
float screen;
float cpu;
float memory;
//方法
void call(){
System.out.println("有打电话的功能");
}
void sendMessage(){
System.out.println("screen:"+screen+",cpu:"+cpu+",memory"+memory+",并且有发短信的功能");
}
}
2:使用对象
使用对象有两个步骤:
创建对象: 类名 对象名=new 类名();
使用对象 :对象名.属性/方法
public class InintTelpone{
public static void main(String[] args){
//创建对象
Telphone phone=new Telphone();
//给实例变量赋值
phone.screen=254.2f;
phone.cpu=1.4f;
phone.memory=2.0f;
//调用实例变量的方法
phone.sendMessage();
}
}
七: 成员变量和局部变量的区别
1:作用域的不同:
1): 局部变量的作用域仅限于用在定义他的方法中
2): 成员变量的作用域在整个类内部都是可见的。
:2:初始值不同:
1): java会给成员变量一个初始值
2):java不会给局部变量一个初始值
在同一个方法中不允许有同名的局部变量,但是在不同的方法中可以允许有同名的局部变量。并且如果局部变量跟成员变量重名,则局部变量的优先级更高。
public class Telphone {
float screen;
float cpu;
float mem;
float var;
void call(){
int localVar=2;
System.out.println(var);
System.out.println(localVar);
System.out.println("telephone 可以用来打电话");
}
void sendMessage(){
int localVar=3;
System.out.println(localVar);
System.out.println(var);
System.out.println("screen:"+screen+",cpu:"+cpu+",mem:"+mem+"Tel可以用来发短信");
}
}
public class InitTelphone {
public static void main(String[] args) {
// TODO Auto-generated method stub
Telphone phone=new Telphone();
phone.screen=2.0f;
phone.cpu=1.4f;
phone.mem=8.0f;
phone.call();
phone.sendMessage();
}
}
运行结果为:
八:静态变量
我们知道,我们可以基于一个类创建多个对象,每个对象的属性都是独立的。然而,在有的时候,我们希望该类的所有对象都能够共用一个成员,此时就需要定义静态变量,用static修饰。
静态的东西在对象产生之前就已经存在了,所以静态的东西与对象无关,静态变量在类被加载时就执行了,在编译实现时静态变量只有一份备份。
静态变量可以用类名来访问,也可以用对象名来访问。
public class HelloWorld {
//设置静态变量
static String className = "高二一班";
public static void main(String[] args) {
//通过类名来访问
System.out.println(HelloWorld.className);
//创建新的对象
HelloWorld hello=new HelloWorld();
//使用对象名来访问
System.out.println(hello.className);
//使用对象名的形式来修改静态变量的值
hello.className="高二二班";
//再次使用类名来访问静态变量,值已经被改变
System.out.println(HelloWorld.className);
}
}
运行结果:
九:实例变量
实例变量是类声明中没有使用static修饰声明的一个字段,实例变量是在类实例化时才会分配内存,因此同一个实例变量在类的不同实例化而产生的对象中是不同的。
十:构造方法
构造方法是定义在java类中的一个用来初始化对象的方法。并且构造方法的名称跟类名相同没有返回值。
构造方法的几个特点:
1:当没有指定构造方法的时候,系统会默认的调用构造方法。
2:当有指定构造方法,无论是有参的还是无参的,都不会自动添加无参的构造方法
3:构造方法的重载跟普通方法的重载一样。
4:构造方法不但可以给对象的属性赋值,还可以保证给对象的属性赋一个合理的值。
无参的构造方法:
public class Telphone {
public Telphone(){
System.out.println("无参的构造方法");
}
}
public static void main(String[] args) {
Telphone phone=new Telphone();
}
}
有参的构造方法:
public class Telphone {
float cpu;
float screen;
public Telphone(float newScreen,float newCpu){
screen=newScreen;
cpu=newCpu;
System.out.println("有参的构造方法");
}
}
public static void main(String[] args) {
Telphone phone=new Telphone(2.0f,1.4f);
}
}
十一:静态方法
静态方法的使用需要注意以下几点:
1:静态方法中可以直接调用同类中的静态变量,但是不可以直接调用非静态成员。
2:如果希望能够调用非静态成员,可以通过创建类的对象,然后通过对象来访问非静态成员。
3:在普通方法中,可以直接访问同类中的静态和非静态成员
4:静态方法中不可以直接调用非静态方法,需要通过类创建的对象来访问。
总结起来就是,在静态方法中不可以使用非静态的成员和方法,因为非静态的成员和方法是在实例化的时候才会分配空间,所以要通过类创建的对象来访问
public class HelloWorld {
// 定义静态变量score1
static int score1 = 86;
// 定义静态变量score2
static int score2 = 92;
// 定义静态方法sum,计算成绩总分,并返回总分
public static int sum() {
return score1+score2;
}
public static void main(String[] args) {
// 调用静态方法sum并接收返回值
int allScore = HelloWorld.sum();
System.out.println("总分:" + allScore);
}
}
十二:静态初始化块
静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
public class HelloWorld {
int num1;
int num2;
static int num3;
//通过构造方法初始化num1;
public HelloWorld(){
num1=1;
System.out.println("通过构造方法给num1赋值");
}
//通过代码块给num2赋值
{
num2=2;
System.out.println("通过代码块给num2赋值");
}
//通过静态代码块给num3赋值
static {
num3=3;
System.out.println("通过静态代码块给num3赋值");
}
void show(){
System.out.println("num1:"+num1+",num2:"+num2+",num3:"+num3);
}
public static void main(String[] args) {
HelloWorld hello=new HelloWorld();
hello.show();
}
}
运行结果为: