java基础新手学习之面向对象
面向对象作为java的核心知识,需要重点需要,注重细节
1.类的访问机制:
在一个类中的访问机制: 类中的方法可以直接访问类中的成员变量。 (例外:static方法访问非static,编译不通过。)
在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员。
2.内存解析
堆(Heap),此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。
栈(Stack),通常来说是指虚拟机栈。虚拟机栈用于存储局部变量等。
局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char 、 short 、 int 、 float 、 long 、double)对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。方法执行完,自动释放。
方法区(Method Area),用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
3.类的成员:属性和方法
3.1 属性和方法
属性 = 成员变量 = filed = 域、字段
方法 = 成员方法 = 函数 = method
3.2成员变量(属性)和局部变量的区别?
3.3对象属性的默认初始化赋值
3.4方法的分类:按照是否有形参及返回值
3.5注 意:
方法被调用一次,就会执行一次
没有具体返回值的情况,返回值类型用关键字void表示,那么方法体中可
以不必使用return语句。如果使用,仅用来结束方法。
定义方法时,方法的结果应该返回给调用者,交由调用者处理。 方法中只能调用方法或属性,不可以在方法内部定义方法
4.简单的练习
4.1利用面向对象的编程方法,设计类Circle计算圆的面积
4.1.1 代码实现
//利用面向对象的编程方法,设计类Circle计算圆的面积。
//测试类
public class CircleTest {
public static void main(String[] args) {
//新建一个对象
Circle circle = new Circle();
//给半径赋值
circle.radius = 3.67;
//调用求圆面积的方法
circle.findArea();
}
}
//圆
class Circle{
//属性,半径
double radius;
//求圆的面积
public double findArea(){
double area = Math.PI * radius * radius;
//输出所求的面积
System.out.println("面积为:" + area);
return area;
}
}
4.1.1运行结果
4.2打印一个mn 的型矩形并计算面积
4.2.1代码实现
/*
* 编写程序,声明一个method方法,在method方法提供m和n两个参数,方
* 法中打印一个m*n的*型矩形,并计算该矩形的面积, 将其作为方法返回值。
* 在main方法中调用该方法,接收返回的面积值并打印。
*/
public class RectangleTest {
public static void main(String[] args) {
RectangleTest rectangle = new RectangleTest();
System.out.println("该矩形的面积为:"+rectangle.method(8,9));
}
public int method(int m,int n) {
for(int i = 0 ;i < m;i++) {
for(int j = 0;j < n;j++) {
System.out.print("*");
}
System.out.println();
}
return m * n;
}
}
4.2.2运行结果
4.3重点练习
4.3.1题目代码
对象数组题目:
定义类Student,包含三个属性:学号number(int),年级state(int),成绩
score(int)。 创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
问题一:打印出3年级(state值为3)的学生信息。
问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
提示:
- 生成随机数:Math.random(),返回值类型double;
- 四舍五入取整:Math.round(double d),返回值类型long。
/*对象数组题目:
定义类Student,包含三个属性:学号number(int),年级state(int),成绩
score(int)。 创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
问题一:打印出3年级(state值为3)的学生信息。
问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
提示:
1) 生成随机数:Math.random(),返回值类型double;
2) 四舍五入取整:Math.round(double d),返回值类型long。
*/
/**
*
* @Description 面向对象练习
* @author Liu
* @date 2021-7-280:49:57
* @version
*/
public class StudentTest {
public static void main(String[] args) {
//声明Student类型的数组,创建Student对象
Student[] stus = new Student[20];
//创建StudentTest对象
StudentTest student = new StudentTest();
//遍历数组
System.out.println("**********************");
System.out.println("遍历学生的信息:");
student.getNumber(stus);
student.print(stus);
//查找student中指定年级的学生
System.out.println("**********************");
System.out.println("查找student中5年级的学生:");
student.searchState(stus, 5);
//根据学生成绩冒泡排序
System.out.println("学生成绩冒泡排序:");
student.sort(stus);
student.print(stus);
}
/**
*
* @Description 给数组元素和属性赋值
* @author Liu
* @date 2021-7-280:51:56
* @param stus
*/
public void getNumber(Student[] stus) {
for(int i = 0;i < stus.length;i++) {
//给数组元素赋值
stus[i] = new Student();
//学号赋值[1,20]
stus[i].number = i + 1;
//年级赋值[1,6]
stus[i].state = (int)(Math.random() * 6 + 1);
//给学生成绩赋值[0,100]
stus[i].score = (int)(Math.random() * (100 - 0 + 1));
}
}
/**
*
* @Description 遍历打印学生信息的方法
* @author Liu
* @date 2021-7-280:52:32
* @param stus
*/
public void print(Student[] stus) {
for(int i = 0;i < stus.length;i++) {
System.out.println(stus[i].info());
}
}
/**
*
* @Description 查找student中指定年级的学生的方法
* @author Liu
* @date 2021-7-280:53:10
* @param stus 学生对象
* @param state 年级
*/
public void searchState(Student[] stus,int state) {
for(int i = 0;i < stus.length;i++) {
if(stus[i].state == state) {
System.out.println(stus[i].info());
}
}
}
/**
*
* @Description 用冒泡排序的方法
* @author Liu
* @date 2021-7-280:52:52
* @param stus
*/
public void sort(Student[] stus) {
for(int i = 0;i < stus.length;i++) {
for(int j = 0; j < stus.length - i - 1;j++) {
if(stus[j].score > stus[j + 1].score) {
//交换的是数组,Student对象
Student temp = stus[j];
stus[j] = stus[j +1];
stus[j +1] = temp;
}
}
}
}
}
class Student{
int number;//学号
int state;//年级
int score;//分数
//显示学生的方法
public String info() {
return "学号:"+number+"\t年级:"+state+"\t成绩:"+score ;
}
}
4.3.2 运行结果