用引用操作对象:
每种编程语言都有自己的操作内存中元素的方式。在java中,一切都被视为对象,因此可以采用单一固定的语法。尽管一切都看作对象,但操作的标识符实际上是对象的一个“引用”。
也就是说,你拥有一个引用,并不一定需要一个对象与之关联。
例如:String s;这里就只有引用,但没有对象,就像只有“遥控器”却没有“电视机”一样。
因此,我们需要在创建一个引用的同时便对其进行初始化。
对象都是由你所创建:
如果你创建了一个引用,自然就希望可以让一个新的对象与之关联。这样就会出现一下语句:String s = new String (“字符串”);
new关键字的意思便是“给我一个新的对象”。
而且我们在创建对象的同时也不用怕对象过多导致空间被填满从而影响到程序的运行。java有一个垃圾回收器,用来监视用new创建的所有对象,并辨别那些不会再被应用的对象。随后,释放这些对象的内存空间,以便供其他新的对象使用。换句话说,你只需要创建对象,一点对象不再需要,他们就会自行消失。
创建新的数据类型:类(class)
上文中我们创建了对象,但是如何判断对象的“属性”和“方法”呢?而对象的“属性”和“方法”换句话说也就是对象的类型。
这时候我们就用到了class关键字,比方说我们来创建一个名为exercise的新的类型:
class Exercise{
代码;
}
你现在就可以用new来创建这种类型的对象:
Exercise e = new Exercise();
上面我们提到了对象的“属性”和“方法”,现在我们就可以在类中设置这两种类型的元素。
下面这段代码展示了如何去设置对象的“属性”和“方法”。
下面展示一些 内联代码片
。
/*
* 创建一个动物类,名字和年龄就是对象的属性,他会说话或者善于奔跑就是对象的方法
* */
public class Annimal {
String name;
int age;
Annimal(String n,int a){
name = n;
age = a;
}//属性
void sing(){
System.out.println("会说话");
}
void run(){
System.out.println("善于奔跑");
}//方法
public static void main(String[] args) {
Annimal a = new Annimal("狮子",7);
System.out.print(a.name+" "+a.age+"岁");
a.run();
Annimal b = new Annimal("鹦鹉",5);
System.out.print(b.name+" "+b.age+"岁");
b.sing();
}
}
代码的结果如下所示
上述代码中的a.name类似的语句就是对对象内部成员的一个引用,这个成员可以是“属性”,也可以是“方法”。
若类的某个成员是基本数据类型,即使它没有进行初始化,java也会给他一个默认值,这里我们取3个基本数据类型以举例:
1.int数据类型的默认值为0;
2.float数据类型的默认值为0.0;
3.boolean数据类型的默认值为false;
基于面向对象的五个基本特性:
1、 万物皆为对象:将对象视为变量,他不仅可以存储数据,还可以在自身执行操作。
2、 程序是对象的集合,他们通过发送信息来告知彼此所要做的:要想请求一个对象,就必须对该对象发送一条消息。
3、 每个对象都有自己的由其他对象所构成的存储:也就是可以通过创建包含现有对象的包的方式来创建新类型的对象
4、 每个对象都拥有其类型:按照通用的说法,每个对象都是某个类的一个实例。
5、某一特定类型的所有对象都可以接受同样的消息:例如“人”类型的对象同时也是“动物”类型的对象,所以“人”类型的对象就可以接收到发送给“动物”类型的对象的消息。
运用其他已经定义好的类:
如果想在自己的程序里运用已经预先定义好的类,那么这个时候就可以使用关键字import,它可以帮助你让编译器知道你想要的类是什么。比如说你想要编译器知道你想要从键盘中输入一个整形的数,那么你就可以像下面这样书写:
下面展示一些 内联代码片
。
import java.util.Scanner;
public class Text {
static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整形的数");
int a = scanner.nextInt();
}
}
上述代码中的语句“import java.util.Scanner;”就是一个类的调用,也可以用另一种写法:“import java.util.*;”,这种写法可以一个包中所有的类,但是它也只能调用当前包中的类,子包中的类也需要重新调用。
用面向对象的方法写第一个程序:
用面向对象的方法写人机猜拳游戏。
人的类 内联代码片
。
package Caiquan;
import java.util.Scanner;
public class Person {
public int a;
public void p_function(){
Scanner scan = new Scanner(System.in);
System.out.println("请输入1(石头),2(剪刀),3(布)");
a = scan.nextInt();
switch (a) {
case 1:
System.out.println("你出石头");
break;
case 2:
System.out.println("你出剪刀");
break;
case 3:
System.out.println("你出布");
break;
}
}
}
电脑的类 内联代码片
。
package Caiquan;
import java.util.Random;
public class Robot {
public int n;
public void p_robot(){
Random r = new Random();
n = r.nextInt(3) + 1;
switch(n){
case 1 :
System.out.println("电脑出石头");
break;
case 2 :
System.out.println("电脑出剪刀");
break;
case 3 :
System.out.println("电脑出布");
break;
}
}
}
主函数 内联代码片
。
package game;
import Caiquan.*;
import java.util.Random;
import java.util.Scanner;
public class Game {
public static void main(String[] args) {
int sump = 0;//代表人赢的次数
int sumr = 0;//代表电脑赢的次数
System.out.println("游戏开始:");
System.out.println("你想玩几局(请输入奇数):");
Scanner scan = new Scanner(System.in);
int j = scan.nextInt();
Person person = new Person();
Robot robot = new Robot();
System.out.println("你的名字是:");
String q = scan.next();
System.out.println("你想和谁比赛1.张三 2.李四 3.王五(请输入数字)");
int w = scan.nextInt();
{
if (w == 1) {
System.out.println("玩家" + q + "vs" +"电脑" + "张三");
}
else if(w == 2){
System.out.println("玩家" + q + "vs" +"电脑" + "李四");
}
else if(w == 3){
System.out.println("玩家" + q + "vs" +"电脑" + "王五");
}
}
for (int i = 0; i < j; i++) {
person.p_function();
robot.p_robot();
/*System.out.println(person.a);
System.out.println(robot.n);//测试机器随机生成的数和人输入的数;*/
if (person.a == 1 && robot.n == 2 || person.a == 2 && robot.n == 3 || person.a == 3 && robot.n == 1) {
System.out.println("^.^ 你赢了");
sump++;
}
if (person.a == 1 && robot.n == 3 || person.a == 2 && robot.n == 1 || person.a == 3 && robot.n == 2) {
System.out.println("- -! 你输了");
sumr++;
}
if (person.a == 1 && robot.n == 1 || person.a == 2 && robot.n == 2 || person.a == 3 && robot.n == 3) {
System.out.println("可惜 平局");
}
}
/* System.out.println(sump);//测试机器和人赢的次数
System.out.println(sumr);*/
System.out.println();
if (sump > sumr) {
System.out.println(q+"胜利");
}
else if (sumr > sump) {
System.out.println("电脑"+"胜利");
}
else if(sumr == sump){
System.out.println(q +" " + "电脑" + "平局");
}
}
}
展示代码运行结果