写在前面:这几天在学习课程的东西就没能抽空出来写一些分享,今天讲一下面向对象的类与对象的相关内容
学习内容安排
JAVA基础课程学习:数据类型(一)、运算符表达式和程序结构控制(二)、面向对象基础:类与对象和接口(三)、面向对象基础:继承抽象多态封装(四)、异常类和常用实用类(五)、组件和事件处理(六)、IO和JDBC(七)、泛型和集合函数(八)。
三、面向对象基础:类与对象和接口
在本次分享中我们会分享什么是类,类声明、成员变量、类变量、方法、创建对象等,具体的点我们主要结合程序进行说明。
类声明
那么我们首先来说明一下什么是类,按照我的理解类的主要内容包括两个部分,第一个部分是相似的属性,第二个部分是相同或者相似的行为,前者是静态的表现后者是动态的表现,那么我们来试着声明一下一个简单的类,
package tt;
class Csdn3_1 {
int id;
String name, email, mobile; //学生的学号、姓名、邮件、手机号
void study(){ //学习活动
}
void mySport(){ //运动
}
}
这样一个类我们描述的是学生的一些基本特征以及学生的活动一个是study一个是mysport,本文就将在这个基础上不断进行扩展。下面首先对上面程序进行解释。
package就是对文件管理存放文件名的说明;
class是对类的声明;
void study()、mySport() 都是对于方法的声明,所谓方法也就是常说的函数。
成员变量、类变量
所谓成员变量也就是常说的全局变量,也就是成员变量声明后适用于该类所有方法,对应的成员变量那么就有局部变量,局部变量仅限于在某个方法里面进行声明使用,当局部变量与成员变量同名时,在该方法中使用局部变量。但如果两者都想用可以使用this调用全局的变量值。另外如果想对成员变量进行赋值需要放在方法里才行。成员变量在未赋值之前就存在默认值,而类变量没有。
类变量这个概念对应的是实例变量,所谓类变量可以简单的理解为唯一变量,就是当样本的某个变量值全都是一样的,为了简便工作节约储存空间,可以定义一个类变量,定义方法就是在变量之前加上static,对于类变量在后续的调用中也可直接调用,这个放在后面再说。
package tt;
class Csdn3_1 {
int id = 10;
String name, email, mobile; //成员变量
static String major; //类变量
void study(){
int id = 542;//局部变量
int id_sum;
id_sum = id + this.id;
}
}
方法
说完了变量的声明后,也就完成了类的前半部分相同的属性,那么开始后半部分的说明也就是相同的的行为,也就是我们所说的方法。方法的组成部分分为类别说明、参数和里面的执行内容,
package tt;
class Csdn3_1 {
int id = 10;
String name, email, mobile;
static String major;
float study(float grade){//浮点型带参数的实例方法
float y = grade;
return (float)(y * 0.5);
}
static void mySport(){ //无类型的类方法
System.out.println(major);
}
}
这里study前面的float就是在声明该方法会返回一个浮点数,然后括号里的float grade就是该方法接受的参数,接受一个成绩,然后return返回一个强制转换的成绩处理后的值。
下面static表示声明的是一个类方法,类方法同类变量一样在调用时可以直接调用,不必利用new进行,这同样放在后面来说。void表示的是无类型,值得注意的是只有类方法才能够调用,也就是类变量major只能由类方法mySport调用。
构造方法、创建对象
讲了这么多,那么到底如何来运行这个程序呢,如果我们仅仅是把上面的类进行声明了,那此时是不可能运行的,因为在JAVA中还需要一个构造函数和主函数,
package tt;
public class Csdn3_1 {
int id = 10;
String name, email, mobile;
private static String major; //类变量
Csdn3_1(){ //构造函数
float g = 96.5f;
float hGrade = study(g);
System.out.println("成绩为:"+ hGrade);
Csdn3_1.mySport();
}
float study(float grade){//实例方法既能调用类变量也能调用实例变量
float y = grade;
return (float)(y * 0.5);
}
static void mySport(){ //类方法只能调用类变量
System.out.println(major);
}
public static void main(String[] args) { //主函数
Csdn3_1 student = new Csdn3_1(); //创建对象
System.out.println("以下一个学生的情况");
Csdn3_1.major = "Math"; //类变量的调用
student.id = 542;
student.name = "唐三";
student.email = "h_shming@163.com";
student.mobile = "123456";
Csdn3_1.mySport(); //类函数的调用
System.out.println("ID:"+student.id);
System.out.println("name:"+student.name);
System.out.println("email:"+student.email);
System.out.println("mobile:"+student.mobile);
}
}
下面我们需要对上面的程序进行部分的说明,首先来说一下class前面的public,这个public其实是一种权限的声明,总共有四种声明public、private、protected以及不输入,他们各自对应着不同的使用权限,public意味着无限制使用该类方法或者属性、private表示仅在当前类下使用、protected表示不能在其他package和子孙类中使用,不输入表示对于其他package不能使用,这里的子孙类留到以后再说。然后就是说明构造方法的构造要求,要求方法名必须与类名相同,且不存在类型说明。
为了能够将类进行实例化,我们需要创建对象,创建对象就是首先说明类名,然后将变量使用new进行赋值类,这样就可以调用类中的函数与属性了。对于之前说的类变量以及类方法,可以直接类名,类变量名或者类方法就能够进行调用,不用单独在创建变量后使用,注意可以在实例方法中调用类方法,但是不能在类方法中调用实例方法。
整体的函数运行顺序就是,首先在主方法处创建对象,然后创建的对象会自动调用构造方法,构造方法向study函数传参数并输出返回值,并调用mySport函数,然后返回给主函数,然后主函数并将自己大括号类函数进行输出。具体输出结果如下,
成绩为:48.25
null
以下一个学生的情况
Math
ID:542
name:唐三
email:h_shming@163.com
mobile:123456
至于为什么构造函数直接调用类方法显示出的是null可能类方法也只能通过类调用吧。
数组的计算
在JAVA中数组并不是基础数据类型,那么在对JAVA映射变量的值进行修改后会对原数组值进行更改,下面来看一个例子,
package tt;
public class Csdn3_2 {
static float x;
Test3_2(){ //构造方法,实例方法没有static
int s[] = {2,3,12,34,5,6,8,456};
x = 8.55f;
study(s);//可以在实例方法里使用类方法,但反过来就不行。
float area = getArea(x);
System.out.println(x); //输出x看是否改变
System.out.println(s[0]); //输出改变后的数组
}
float getArea(float radius){
float y = radius;
y++;
System.out.println(y);
return (float)(y);
}
static void study(int s[]){
int xx[];
xx = s;
xx[0]=120; //数组因为不作为基础数据类型,所以会随着映射对象改动而变动值
}
public static void main(String[] args) {
Test3_2 tt = new Test3_2();
}
}
9.55
8.55
120
从输出结果可以看到,x的值赋给y后,y自增了后x并没有变化,而数组s赋给xx后,改变xx的第一位同样也导致了s数组的第一位改变了。
更大的数据类型
当我们发现之前讲的8大基础类型不够用的时候,我们就可以使用类的方法,调用java.lang包里的Btye、Integer、Short、Long、Float、Double、Character这样就可以使用无限制位数的数值了,当然这个包是默认加载了的,
package tt;
public class Csdn3_3 {
public static void main(String[] args) {
String s1 = "20", s2 = "80";
System.out.println(s1 + s2);
Double d1 = new Double(s1);
Double d2 = new Double(s2); // 用类来创建数字,遇到很大的数据,不能简单的加减乘除
double m1 = d1.doubleValue();
double m2 = d2.doubleValue();
System.out.println(m1+m2);
}
}
2080
100.0
这里需要注意的是如果是使用了类的方法来定义变量的话,我们在进行运算的时候就需要用对应的方法来处理,比如doubleValue()然后再进行计算。
结语
今天分享了一部分关于类和方法的基础东西,下一节继续更新。
谢谢阅读。