做盗版电影网站违法吗,智能网站建设维护软件,做ppt的网站有哪些内容,网站开发都有什么端前言 本篇讲解Java类和对象的入门版本。 学习目的#xff1a; 1.理解什么是类和对象。 2.引入面向对象程序设计的概念 3.学会如何定义类和创建对象。 4.理解this引用。 5.了解构造方法的概念并学会使用 考虑到篇幅过长问题#xff0c;作者决定分多次发布。 面向对象的引入
J…前言 本篇讲解Java类和对象的入门版本。 学习目的 1.理解什么是类和对象。 2.引入面向对象程序设计的概念 3.学会如何定义类和创建对象。 4.理解this引用。 5.了解构造方法的概念并学会使用 考虑到篇幅过长问题作者决定分多次发布。 面向对象的引入
Java是一门面向对象的程序设计语言。那么面向对象具体是啥意思呢 面向对象Object-oriented更多是一种思维模式它替换了原有的面向过程的思考方式转为了面向对象。这种编程思想强调了将问题分解为对象的集合对象有各自的属性和方法对象与对象之间又有信息传递和行为协助。
总结解决问题的重心由拆分步骤改变成拆分成对象对象和对象的协作上。编程思维模式的转变
面向过程编程
如果你先前学过任何一门面向过程的编程语言比如C语言。回忆一下先前解决问题是不是研究解决一个问题的过程是怎样的 它的重点在于如何完成任务要实现哪些功能的函数函数接收参数返回值执行一系列的逻辑结构过程然后才是研究数据应该采用什么数据结构存储最后输出正确的结果。 面向过程首先考虑的是如何处理数据即算法其次是数据如何存储数据结构。
面向对象编程
面向对象编程Object-Oriented Programming简称OOP.它是一种以对象为中心的编程范式对象有自己的状态行为通过封装继承多态实现代码的模块化。实现对象与对象之间的协作和交互。 与面向过程对比面向对象先考虑的是数据如何存储将相关联的数据和方法包装成一个对象。其次考虑处理对象与对象之间。可以说先数据结构后算法与面向过程反着来了。
生活化的示例
传统洗衣服面向过程 1.拿脏的衣物。 2.水槽装足够的水 3.加入洗衣粉 4.将脏衣服放入水槽 5.疯狂手搓 6.冲洗衣服 7.换水 8.继续冲洗衣服 9.拧干洗好的衣服 10.晾衣服。 现代洗衣服面向对象 确定对象 脏衣物洗衣粉洗衣机 我们人为交互 1.将脏衣物放入洗衣机 2.倒入洗衣粉。 3.设定洗衣机的程序。 洗完后取出晾干就可以了。 整个都是三个对象的交互。洗衣机怎么洗的内部怎么运作的I don’t care. 总之我知道按照上面三步衣服就洗好了。 类和对象的概念
举个栗子人就是一个类。人有姓名年龄身高体重家庭住址。但人的概念太抽象了太广泛了。那么张三小红李华你和我就是具体的人了我们也有上面的姓名身高年龄。 所以呢*类是类型蓝图模板。*即上面例子中的人。那么后面的张三就是具体的人就称为一个对象。人有的属性张三也有。 所以类可以描述对象对象是类的实例化。
类
接下来正式介绍类 类class是构造 construct ) 对象的模板和蓝图 由类构造对象的过程称为创建类的实例 instance ) 。 现在笼统的阐述类的特点后面补充实例 类的特点 1.属性fileds:类可以定义成员变量。成员变量体现的是对象的属性状态特征。每个对象通过各自类的属性有自己的特点状态。 2.方法methods类内部可以定义成员方法简称方法或者函数。方法定义了对象的行为方法可以让对象执行某种特定的功能更能完成对象与对象的协作。 3.类的实例化instance:类本身只是一个模板类似C中的结构体。只有实例化构造对象它内部的属性和方法才有意义。如何创建下面会给出例子。 4.构造方法construct这里先不提往后看下去后面会讲。 5.封装类抽象类继承接口…………这里不提。其实作者也没懂完 现在可以定义一个类了 类的基本语法目前掌握以下这些就够了 class 类名{ //属性成员变量 //成员方法 } 1.class 类的关键字定义一个类必须有。 2.类名遵循标识符的命名规则采用大驼峰命名法。 3.花括号别忘了别漏了。 4.属性成员变量这里可以定义各种类型变量表示类的状态了。 5.成员方法定义类的行为与操作。
下面定义一个Dog类
public class Dog {
//成员变量public String name;public int age;//成员方法public void bark(){System.out.println(Ruff! Ruff!);}
}
上面我们定义这样一个类该类有两个成员变量分别是字符串name和int年龄。还有bark这样一个成员方法表示dog在叫的行为。 这里的public是访问修饰符表示类成员变量成员方法的访问权限。
类的实例化 由类生成对象的过程叫做类的实例化
类在Java中为引用类型。 int double float为内置类型基本数据类型Java中与其相对的类型称为引用类型数组字符串也是引用类型。引用类型也是自定义类型类是用户自定义出来的类型。 Java中由类创建一个对象要用到关键字new.
Dog dognew Dog();语法 类名 变量名 new 类名 这里Dog就是先前定义的类了。 dog是这个类类型的变量名。 new “给我一个对象” 后面跟上Dog()就创建了一个属于Dog的对象了。 new后面其实跟着的是构造方法这个稍后再说。 既然创建了对象我们定然想到如何处理对象呢。 dog.age1;dog.nameBin;dog.bark();通过圆点运算符.我们就可以访问对象的成员了和方法了。 这里对象继承了类的属性这个实例化的dog也有了name和age,也能调用bark方法了。
假设我们不对对象初始化操作会出现问题吗 不会因为局部变量未初始化会被编译器报错警告。而对象的成员变量不在栈上而在堆上未初始化会有对应的默认值。 Dog dognew Dog();System.out.println(dog.name);System.out.println(dog.age);对于引用类型其默认值为null内置类型就为相应的0值int对于0float对应0.0Fdouble对应0.0另外boolean对应false。 我这里的dog在main方法内部创建就是局部变量在栈上开辟一块空间同时在堆上为这个对象开辟合适的空间保存对象的属性。这里的dog实际存储了对象在堆上的地址dog就称为一个引用。通过引用我们访问对象的成员。
对象
其实类那一部分已经说明完大部分对象的内容这里稍作补充和总结。 对象有状态。这里的状态从代码来看就是成员变量的值不同反过来就算同一个类的对象成员变量的值不同说明他们之间状态不同。 对象有行为。根据对象的状态调用成员方法行为上不同反之根据自身的行为方法调用也会影响自身状态。 对象有名字。每个对象应该有独立的标识符来区分不同 对象与对象之间独立。每个对象有自己的状态和行为。 认识this引用
关键字this
先定义如下一个类 里面的setData成员方法中的形参与成员变量名同名还能进行赋值吗
public class Date {public int year;public int month;public int day;public void setDate(int year,int month,int day){yearyear;monthmonth;dayday;}public void printByString(){System.out.println(year year month month day day);}
}
public class Date {public int year;public int month;public int day;public void setDate(int year,int month,int day){yearyear;monthmonth;dayday;}public void printByString(){System.out.println(year year month month day day);}public static void main(String[] args) {Date datenew Date();date.setDate(2024,5,13);date.printByString();}
}运行结果是怎样的呢修改data对象的值了吗 答案必然是没有否则这里要说明的this干嘛呢。 很明显这里setDate里形参和成员变量名重复了左值的year究竟代表了成员变量还是形参呢是形参。 所以这里上述的赋值就是自我娱乐对成员变量没有影响。因为调用方法时会在栈上开辟空间称作函数栈帧此时局部变量函数形参优先使用。 这个时候就要用上this对setDate函数做出如下修改。 public void setDate(int year,int month,int day){this.yearyear;this.monthmonth;this.dayday;}这里的this相当于原来的date对象很显然this.成员变量和方法参数区分开了。说明了这里左值同名的yearmonthday是引用data对象的成员变量。避免出现同名时混淆的情况。
那么this是怎样知道它代表哪个引用呢 实际上那个对象的引用在某个方法时会将这个引用当作函数参数传递过去。 实际的setDate写成下面这样。只不过我们写的时候省略了第一个参数罢了。 由此我们可以知道那个对象的引用在调用某方法时这个this就代表谁了。
public void setDate(Date this,int year,int month,int day){this.yearyear;this.monthmonth;this.dayday;}
这里的this由于就是date它也可以调用自身的成员方法。 public class Date {public int year;public int month;public int day;public void setDate(Date this,int year,int month,int day){this.yearyear;this.monthmonth;this.dayday;this.printByString();}public void printByString(){System.out.println(year year month month day day);}public static void main(String[] args) {Date datenew Date();date.setDate(2024,5,13);}
}this还有一个用处调用其它构造方法
构造方法
前面提过成员方法那么构造方法和成员方法有什么区别呢类比学习一下吧。 一般的成员方法格式 返回值 方法名参数列表{ //方法体 } 构造方法可以看作特殊的成员方法 第一它没有返回值类型。 第二它的方法名和它的类名一样。 即 构造方法格式 返回值 方法名 类名参数列表{ //方法体 } public Date(){}这就是一个简单的构造方法。 想到前面这个Date datenew Date(); new后面的 Date不就是一个构造方法吗哎奇怪当时我们并没有创建这样的构造方法呀。 事实上如果定义的类没有构造方法编译器会默认给你上述的构造方法这种构造方法是最简单的。没有带任何参数。 需要注意的是如果你自己创造了一个构造方法请严格按照你的构造方法创建对象此时编译器不会在为你默认这么一个构造方法了。
下面给出一个带参数形式的构造方法。
public Date(int year,int month,int day){this.yearyear;this.monthmonth;this.dayday;}这样就可以在创建对象时同时初始化成员变量了。 构造方法同样支持重载。即上面两个构造方法可以同时存在一个Date类中。
public class Date {public int year;public int month;public int day;public void setDate(Date this,int year,int month,int day){this.yearyear;this.monthmonth;this.dayday;this.printByString();}public void printByString(){System.out.println(year year month month day day);}public Date(){}public Date(int year,int month,int day){this.yearyear;this.monthmonth;this.dayday;}public static void main(String[] args) {Date datenew Date(2004,12,8);date.printByString();}
}最后总结一下构造方法 1.构造方法名与类名相同。 2.无返回值类型不要理解成返回值类型为void 3.创建对象时调用且只能调用一次。 4.构造方法可以重载。比如上面的构造方法在创建对象时可以选择不带参数还可以选三个参数初始化的 5.如果没有自定义构造方法那么编译器默认会构造方法。
结尾
想不出来说什么了太困了。嗯~ 一无所有或者赢下所有