类, class :用于描述一种数据类型
在Java里,通过新建 class 来描述各种自定义的数据类型。一个class可以若干基本类型的组合。
(1)、打开Eclipse,在左侧的Package Explorer窗口中,右键点 src下的my (2)、在右键菜单里, 选择New | Class (3) 、在新建类(New Class)对话框里 则Eclipse为我们添加了一个Student.java (4)、为类添加内容 Student的属性:学号 姓名 性别 手机号
package my; public class Student { public String id; // 学号 public String name; // 姓名 public boolean sex; // true: 男 false 女 public String cellphone; // 手机号 }(5)、创建对象 在HelloWorld.java里,
package my; public class HelloWorld { public static void main(String[] args) { Student s1 = new Student(); s1.id = "20171001"; s1.name = "小王"; s1.sex = true; s1.cellphone = "18600010201"; System.out.println("学号: " + s1.id); System.out.println("姓名: " + s1.name); System.out.println("性别: " + s1.sex); System.out.println("手机号: " + s1.cellphone); } }类:类型,描述某一类事物的共性 Student是一个类型 所有的Student都有id,name,sex, cellphone这几个属性
对象:一个具体实例 s1是一个Student类型的对象, 因而,s1具有id, name, sex, cellphone这几个属性
① 起一个合适的类名
类名应该有意义,让人能顾名思义类名一般以大写开头 例如 Movie , ActionMovie② 属性:定义合适的名字和类型
属性名一般以小写开头 如 fontSize lineWidth应该用什么类型比如,每个学生,除了有学号、姓名、手机号等基本信息之外。还绑定了一个校园卡、一个银行账号。
public class Student { public String id; public String name; public boolean sex; public String cellphone; public StudentCards cards = new StudentCards(); } 在main里创建Student对象,对其属性cards赋值。由于cards本身也是对象,所以可对s1.cards.bankCardNumber赋值。 ```java public static void main(String[] args) { // 第一个学生的信息 Student s1 = new Student(); s1.id = "20171001"; s1.name = "王草"; s1.sex = true; s1.cellphone = "18610022345"; s1.cards.schoolCardNumber = "230920390q302"; s1.cards.bankCardNumber = "2923923023293023"; }`
在Java语言里:
整数类型(long int short byte):默认值为 0 小数类型(double float):默认值为 0.0 boolean类型:默认值为 false 引用类型 (String, Student…) : 默认值为 null 数组类型:默认值为null 因为引用类型和数组类型默认值为null,此处容易出现 NullPointerException,空指针错误
(1)一个类里,不仅可以添加属性,还可以添加方法。 类 { 属性 : 描述“我有什么” 方法 : 描述“我能做什么” } (2)类的方法的基本形式 修饰符 返回值类型 名称 ( 参数列表 ) { 方法体 } (3)如何使用类的方法 为了使用的类的方法我们首先必须创建一个对象: Student s = new Student(); 然后通过点运算符来调用类的方法: s.show();
参数列表: ( 0…N个参数 )
以逗号分隔类型,变量名void show (int a, double b , String s) void show (boolean checked, String msg)
在Java语言里,使用return语句来返回一个值。
return语句执行后,函数不再往下执行,直接退出方法。
①写出函数
package my; public class max { public int MAX=0; public int getmax(int[] a) { for(int i=0;i<a.length;i++) { if(a[i]>MAX)MAX=a[i]; } return MAX; } }②调用函数
package my; public class HelloWorld { public static void main(String[] args) { int[] a={3,4,5}; int[] b= {7,8,9}; max m=new max(); int m1=m.getmax(a); int m2=m.getmax(b); System.out.println("最大值为:"+m.MAX); } }给定一个int值,如果打印一个三角型 如 1 2 3 4 5 6 7 8 9 10
public void print ( int n ) { if(n<=0) { System.out.println("给定的数<=0!!"); return; } if(n>10) { System.out.println("给定的数太大了!"); return; } int rows = 0; // 行数 int cols = 0; // 列数 for(int k=1; k<=n; k++) { System.out.print( k + " "); cols ++; if( cols > rows ) { System.out.print("\n"); // 换行 rows ++; cols = 0; } } }return语句:在得到结果之时,立即终结方法
return语句可以放在方法的任何一个位置,可以放在while{} 也可以放在if{}中,没有限制如果返回值是void,也可以直接终结函数return;给定一个数组,求里面的能被8整除的数 int[] arr = { 18, 28, 32, 36, 48 };
// 把符合要求的数放在返回值里 public int[] find8 ( int[] arr) { // 创建等大的数组 int[] temp = new int[ arr.length]; int count = 0; for (int i=0; i<arr.length; i++) { if( arr[i] % 8 == 0) { temp[count] = arr[i]; count ++; } } // 拷贝到结果数组里 int[] result = new int[ count ]; for(int i=0; i<count; i++) { result[i] = temp[i]; } return result; }调用:
int[] arr = { 18, 28, 32, 36, 48 }; MyMath m = new MyMath(); int[] result = m.find8( arr ); System.out.println("完成");各处类型的值都可以被return:
int , double, boolean, String引用类型: Student这样的对象数组对象(1) 重载 (overload) Java语言里,允许方法的名字相同(参数不同即可)
public class Simple { public void test() {} public void test (int a, int b) {} public void test (int a, String b) {} }调用的时候,编译器会根据参数列表来匹配不同的方法。
this表示当前对象,当访问对象自身的属性时,可以直接用this访问 this : 表示当前对象
要访问自己的属性和方法时,可以用this来访问 this.width this.height this.isPrime( … )
调用
// HelloWorld.java ,main里的测试代码/// Machine m = new Machine(); m.insertCash( 5 ); m.insertCash( 10); m.insertCash( 50); // 按一下按钮 int coins = m.exchange(); System.out.println("拿到了" + coins + "个游戏币");对象就是数据和算法的一个融合体 面向对象的思维方式: 给它所需的数据 >> 让它干活 >> 取出结果
在 属性/方法 前面, public(公开的): 该成员可以被外部访问 (类的外部 ) private(私有的): 该成员不可以被外部访问 示例:
public class Example { public int number = 10; public void show() { System.out.println("number: " + number); } }注意 (1)内部访问时不受private限制(内部:指类的内部方法) (2)不写访问修饰符,则一般默认为private( 忽略这种规则)
在Java里,类的属性一般设置为private。那么,外部还怎么访问属性的值呢? Getter: 添加一个方法,用于读取该属性的值 Setter: 添加一个方法,用于设置该属性的值 方法的命名规则: get + 属性名 set + 属性名 注意把属性名的首字母大写,如setNumber
步骤如下 右击界面出现如下内容 选择之后会出现 选择你想创建的对应的函数即可
封装:是一种设计思想,将实现细节封装到内部,不让用户看到,从而达到对内部信息进行保护的目的。用户能操作的,都是public的。
构造方法:用于构造对象的方法 ( 当创建对象时系统自动调用的方法 ) 规则:
(1) 方法名与类名相同(2) 无返回值创建对象:
Student s = new Student("2019215xxx", "徐同学", true);在创建对象的同时,传入参数,达到初始化对象的目的
通常一个类可以加多个构造方法,一般至少要加一个“默认构造方法”(即无参数的构造方法)
构造方法一般用public修饰。 某些特殊的情形用private(比如说:单例模式,初学者暂不需要了解)
第一种写法:在构造方法里初始化
public class Example { int[] arr ; public Example() { arr = new int[4]; } }第二种写法:直接初始化
public class Example { int[] arr = new int[4]; public Example() // 构造方法可以省略不写 { } }此时,构造方法可以省略不写。所以,在Java里我们经常看不到构造方法,大家都是简化写法,即在定义属性的时候直接初始化。
需要注意的是,普通语句必须写在构造方法里。 例如
public class Example { int[] arr = new int[4]; arr[0] = 1; // 错!赋值语句必须写在方法体里! arr[3] = 20; // 错!赋值语句必须写在方法体里! }上面这种写法是错误的 正确的写法为:
public class Example { int[] arr = new int[4]; // 定时变量时可以初始化 public Example() { arr[0] = 1; // 语句必须写在方法体里 arr[3] = 20; } }在Java语言,程序员只管创建对象,不管销毁对象,这是因为对象的销毁由系统自动完成。
Student stu = new Student();当对象不再被使用时,由圾圾回收机制GC 自动回收。( GC: Garbage Collect ) 注意,回收的不是垃圾,而是不再被使用的对象
那么,何为对象不再被使用呢? 对象不再被使用,即对象失去引用。当一个对象,没有任何引用指向它时,称为“失去引用”,该对象即将被GC回收。
Student stu = new Student(); // 对象1 stu = new Student(); // 对象2被stu引用。对象1失去引用