前言
今天是主要学习内容是Java面向对象的部分。新的一天又开始了,希望抓紧今天的机会呀!!
一、面对对象学习主线
- Java类以及类的成员:属性、方法、构造器、代码块、内部类
- 面对对象三大特征:封装性、继承性、多态性、(抽象性)
- 其他关键字:this、super、final、static、abstract、interface、package、import等
二、面向对象
1.面向对象和面向过程
- 面向过程:强调的是功能行为,以函数为最小对象,考虑怎么做。
- 面向对象:将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
程序员从面向过程的执行者变成了面向对象的指挥者。
2.类和对象
-
属性:对应类中的成员变量(field)(域、字段)
-
行为:对应类中的成员方法(函数)(method)
-
创建对象~实例化对象
面对对象思想落地的实现
- 1.创建类,设计类的成员
- 2.创建类的对象
- 3.通过对象.属性|对象.方法调用对象的结构
//测试类
public class PersonTest {
public static void main(String[] args){
//创建Person类的对象
Person p1= new person();
//调用对象的结构:属性方法
p1.name="Tom";//field
p1.isMale="true";//field
p1.eat();//method
}
//体会类创建的过程:
class Person{
//属性
String name;
int age=1;
bollean isMale;
//方法
public void eat()
{
System.out.println("人可以进食");
}
}
Java处理机制内存结构
- 堆:存放对象实例
- 栈:存储局部变量
- 方法区:类信息、常量、静态变量、即时编译器编译后的代码
类中属性的使用
1.相同点
-
定义变量的格式
-
先声明,后使用
-
变量都有对应的作用域
2.不同点
-
在类中声明的位置不同:属性直接定义在类的{}之内;局部变量声明在方法内、方法形参、代码块内、构造器内部的变量。
-
权限修饰符:属性可以在声明属性时,声明它的权限、使用权限修饰符(public|private|protected|缺省);局部变量不可以使用权限修饰符。
-
默认初始化值的情况:属性:类的属性,根据其类型、都有默认的初始化值。局部变量:没有默认初始化值,意味着在调用之前一定要显式赋值。特别的,形参调用时复制。
-
内存中加载的位置:属性加载到堆空间中;(非static)局部变量加载到栈空间中。
方法:描述类具有的功能
- 方法的声明:权限修饰符 返回值类型 方法名(形参列表)
- 返回值类型:有返回值| 无返回值
- 方法名
- 形参列表:格式:数据类型 形参1,数据类型2 形参2,…
- 方法体
- return关键字的使用:
- 使用范围:使用在方法体中。
- 作用:结束方法;返回需要的数据。
- 注意点:return关机子后面不可以声明执行语句。
7.方法的使用:可以调用当前类的属性和方法
练习
package person;
public class Person {
String name;
int age;
int sex;
public void stydy(){
System.out.println("studying");
}
public void showAge(){
System.out.println("age:"+age);
}
public int addAge(int i){
age+=i;
return age;
}
}
package person;
import person.Person;
public class personTest {
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "Tom";
p1.sex = 1;
p1.age = 18;
p1.stydy();
p1.showAge();
System.out.println("new age:"+p1.addAge(2));
Person p2 = new Person();
p2.showAge();
}
}
package Student;
public class studentTest {
public static void main(String[] args) {
Student[] stus=new Student[20];
for(int i=0;i<stus.length;i++){
stus[i]=new Student();
stus[i].number=i+1;
stus[i].stage=(int)(Math.random()*(6-1+1)+1);
stus[i].score=(int)(Math.random()*100-0+1);
}
for(int i=0;i<stus.length;i++){
System.out.println(stus[i].number+","+stus[i].stage+","+stus[i].score);
}
for(int i=0;i< stus.length;i++){
if(stus[i].stage==3)
System.out.println("stage3:"+stus[i].number+","+stus[i].stage+","+stus[i].score);
}
}
努力向美好靠近的一天!!(>_<)!!