Java的封装性就是把对象的属性和对属性的操作结合成一个独立的单位,并尽可能的隐藏内部的细节。 它包含两个含义:
1)把对象的全部属性和对属性的操作结合在起,形成一个不可分割的独立单位(即对象)。
Java是一种纯粹的面向对象程序设计语言,除了基本数据类型(如整型、浮点型等),Javn中的数据都以对象的形式存在,将属性和操作封装在对象中,它没有游离于类之外的属性和方法,可以有效实现细节隐藏。
2)信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界,只保留有限的对外公开接口使之与外部发生联系,这一点通过Java包Java类及其成员的访问权限实现。 可以理解为黑盒子,日常用品之类的商业用品。只给你可以应用的部分。
类是Java面向对象程序设计中最基本的程序单元。 编写Java程序时,首先创建类,然后通过类创建不同的对象。 当程序运行时,对象有对应的内存空间存储其具体的属性值,通过对象激活相应的方法(方法访问内存),实现一定的功能。
Java文件中中能有一个同名类,且只有它能被public修饰
java中通过class关键字进行定义:类声明和类体
public class muchu{ //关键字class前可以有访问权限public也可以没有
//类体
}
1、属性的定义
属性的定义分为两种:
基本数据类型
对象类型:通过class关键字定义的对象类型
c语言基本数据类型 /位 | Java基本数据类型 /位 |
---|---|
char 1 | char16 |
short 2 | $short16 |
int 4 | int32 |
long 4 | long64 |
longlong 8 | |
float 4 | float8 |
double 8 | double64 |
longdouble 8 | |
boolean1 | |
byte8 |
public class Muchu{
private float x;
private float y;
}
public class Shankong{
private Muchu mu1;
private Muchu mu2;
}
·类Muchu两个访问权限为“private”属性,x,y的基本数据类型为float(基本数据类型)。
·类Shankong的两个访问权限位private属性,其为对象类型。其中private表示的属性是私有的,只有该类的内部可以访问。
2、方法的定义
方法的定义格式包括方法的访问权限、方法名字、方法的参数列表、返回类型和方法体。
·参数类型和方法的返回类型有对象类型和基本数据类型。
3、构造方法的定义
实质就是 初始化参数
1.)它具有与类名相同的名称
2.)它没有返回值(如果有,则不是构造方法,而是和构造方法同名的成员方法)
3).构造方法的调用时机与一般的方法不同。一般的方法是在需要时才调用,而构造方法则是创建对象时自动调用,并执行构造方法的内容。因此,构造方法无需在程序中直接调用,而是在对象产生时自动执行。
4).基于上述构造方法的特性,可利用它来对对象的数据成员做初始化的赋值;
5).在类中没有声明任何的构造方法,系统会自动为类加入一个无参的且什么都不做的构造方法,类似于下面的代码:
public Person(){}
6).一但用户自定义了构造方法则系统不再提供无参构造方法。用户手动添加一个(是不是一定要添加?)
7).构造方法虽然可以被私有了,但并不一定说此类不能产生实例化对象,只是产生这个实例化对象的位置有所变化,即只能在本类中产生实例化对象。
例子:Java编译器为其提供的缺省构造方法
public Muchu(){
}
数据类型 | 缺省值 |
---|---|
基本数据类型 | 0 |
boolean | false |
char | \0 |
对象类型变量 | null |
函数构造方法的定义部分转载于:https://blog.csdn.net/ClinEvol/article/details/82870454
1、对象的声明
Java中的对象类似于c语言的指针,对象变量声明后,系统将分配32位地址空间(4个字节),并且空间为null。
例子:声明类Muchu 的对象变量mu
Muchu mu;
2、对象的创建
new一个对象,只有在对象变量声明后,通过new关键字调用类的的构造函数创建对象,然后后才可以使用对象变量。
Muchu mu = new Muchu(x,y);
每次new一个对象都会创建一个类的新的对象,并且分配内存空间。
对象变量的存储地址不可修改,仅仅可以通过访问他的指向的对象的地址。
3、对象的使用
如果要访问对象里的某个成员变量或方法,可以通过下面的语法来实现:
对象名称.属性名 //访问属性
对象名称.方法名() //访问方法
例如,想访问Person类中的name和age属性,可用如下方法来访问:
p1.name; //访问Person类中的name属性
p1.age; //访问Person类中的age属性
因此若想将Person类的对象p中的属性name赋值为“张三”,年龄赋值为25,则可采用下面的写法:
p1.name = "张三" ;
p1.age = 25 ;
如果想调用Person中的talk()方法,可以采用下面的写法:
p1.talk(); //调用Person类中的talk()方
Java形参和实参的结合方式为值传递。 与形参的数据类型无关。
假设 通过Muchu muchu1 = new Muchu(100,200);
创建了一个对象m1,定义两个方法changeOne()和changeTwo(),并将muchu1作为实参传递给两个方法。
public static void changeOne (Muchu m1){
m1 = new Muchu(78,156);
}
public static void changeTwo(Muchu m1){
m1.setX(15);
}
m1作为形参,由于是值传递,实际参数muchu1会把其存储的地址拷贝到形参m1中,此时形参和实参是不同内存同一地址。
方法changeOne()的调用不会影响实参的和实参指向的对象。(只修改了形参的值,没修改指向的对象的值)
方法changeTwo()的调用不会影响实参,单会影响实参指向的对象。(方法修改了形参指向的对象的属性值)
在Java中,同一个类中的多个方法可以有相同的方法名称,但是有不同的参数列表,这就称为方法重载(method overloading)。
参数列表又叫参数签名,包括参数的类型、参数的个数、参数的顺序
(有顺序),只要有一个不同就叫做参数列表不同。
重载是面向对象的一个基本特性。
public class Demo {
//一个普通得方法,不带参数,无返回值
public void add(){
//method body
}
//重载上面的方法,并且带了一个整形参数,无返回值
public void add(int a){
//method body
}
//重载上面的方法,并且带了两个整型参数,返回值为int型
public int add(int a,int b){
//method body
return 0;
}
}
通过上面的例子,不难看出,重载就是在一个类中,有相同的函数名称,但形参不同的函。重载的结果,可以让一个程序段尽量减少代码和方法的种类。
说明:
·参数列表不同包括:个数不同、顺序不同、类型不同。
·仅仅参数变量名称不同是不可以的。
·跟成员方法一样,构造方法也可以重载。
·声明为final的方法不能被重载。
·声明为static的方法不能被重载,但是能够被在此声明。
方法名称必须相同。
参数列表必须不同。
方法的返回类型可以相同也可以不相同。
仅仅返回类型不同不足以称为方法的重载。
方法重载的实现:
方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错,这叫做重载分辨
。
方法重载转于:https://blog.csdn.net/xkfanhua/article/details/80561673