目录
06:编程创建一个Box类,在其中定义三个变量表示一个立方体的长、宽和高,定义一个方法求立方体的体积。创建一个对象,求给定尺寸的立方体的体积。
属性:名字,性别,年龄
方法:(1)自我介绍的方法(2)吃饭的方法
创建一个对象“张三”
package com.nanchu.classpractice;
/**
?* @Author 南初
?* @Create 2024/1/15 16:20
?* @Version 1.0
?*/
public class Pen {
????String name;
????char sex ;
????int age;
????public String getName() {
????????return name;
????}
????public void setName(String name) {
????????this.name = name;
????}
????public char getSex() {
????????return sex;
????}
????public void setSex(char sex) {
????????this.sex = sex;
????}
????public int getAge() {
????????return age;
????}
????public void setAge(int age) {
????????this.age = age;
????}
????public void SelfIntroduction(){
????????System.out.println("我叫:"+name+",性别是:"+sex+",今年:"+age+"岁了");
????}
????public void Eat(String food){
????????System.out.println("我爱吃:"+food);
????}
}
public class alltest {
????@Test
????public void PenTest(){
????????Pen zhangsan = new Pen();
????????zhangsan.setName("张三");
????????zhangsan.setSex('男');
????????zhangsan.setAge(22);
????????zhangsan.SelfIntroduction();
????????zhangsan.Eat("鸡大腿");
????}
}
属性:品牌;车长;颜色;价格;
方法:跑的方法
创建五个对象:“捷达”,“宝马”,“劳斯莱斯”,“科鲁兹”,“迈锐宝”
package com.nanchu.classpractice.two;
/**
?* @Author 南初
?* @Create 2024/1/15 16:40
?* @Version 1.0
?*/
public class Car {
????String brand;
????double carLength;
????String color;
????double price;
????public void CarAll(String brand, double carLength, String color, double price) {
????????this.brand = brand;
????????this.carLength = carLength;
????????this.color = color;
????????this.price = price;
????}
????public void run(String brand, double speed){
????????System.out.println(brand+"最可可以跑:"+speed+"km/h");
????}
????@Override
????public String toString() {
????????return "{" +
????????????????"brand='" + this.brand + '\'' +
????????????????", carLength=" + this.carLength +
????????????????", color='" + this.color + '\'' +
????????????????", price=" + this.price +
????????????????'}';
????}
}
?@Test
????public void CarTest(){
????????Car car1= new Car();
????????Car car2= new Car();
????????Car car3= new Car();
????????Car car4= new Car();
????????Car car5= new Car();
????????car1.CarAll("捷达",5.4,"白色",150000);
????????car2.CarAll("宝马",5.5,"黑色",200000);
????????car3.CarAll("劳斯莱斯",6.0,"银白色",2000000);
????????car4.CarAll("科鲁兹",5.1,"红色",10000);
????????car5.CarAll("迈锐宝",5.3,"黑色",15000);
????????System.out.println(car1.toString());
????????car1.run("捷达",200);
????????System.out.println(car2.toString());
????????car2.run("宝马",210);
????????System.out.println(car3.toString());
????????car3.run("劳斯莱斯",220);
????????System.out.println(car4.toString());
????????car4.run("科鲁兹",210);
????????System.out.println(car5.toString());
????????car5.run("迈锐宝",200);
????}
属性:课程名;学时;任课老师;
创建五个对象:“c语言”,“Java编程”,“php网络编程”,“c++”,“数据结构”
package com.nanchu.classpractice.question;
/**
?* @Author 南初
?* @Create 2024/1/15 17:05
?* @Version 1.0
?*/
public class ThreeCourse {
????/*属性:课程名;学时;任课老师;
创建五个对象:“c语言”,“Java编程”,“php网络编程”,“c++”,“数据结构”*/
????String courseName;
????double classHour;
????String teacher;
????public ?ThreeCourse(String courseName, double classHour, String teacher) {
????????this.courseName = courseName;
????????this.classHour = classHour;
????????this.teacher = teacher;
????}
????@Override
????public String toString() {
????????return "{" +
????????????????"课程名='" + courseName + '\'' +
????????????????", 学时=" + classHour +
????????????????", 任课老师='" + teacher + '\'' +
????????????????'}';
????}
}
@Test
public void ThreeCourseTest(){
????ThreeCourse course1 = new ThreeCourse("C语言",50,"李老师");
????ThreeCourse course2 = new ThreeCourse("Java编程",60,"王老师");
????ThreeCourse course3 = new ThreeCourse("php网络编程",40,"张老师");
????ThreeCourse course4 = new ThreeCourse("c++",55,"贾老师");
????ThreeCourse course5 = new ThreeCourse("数据结构",70,"肖老师");
????System.out.println(course1.toString());
????System.out.println(course2.toString());
????System.out.println(course3.toString());
????System.out.println(course4.toString());
????System.out.println(course5.toString());
????
}
04:???????0——————>X
??????????|
??????????|
??????????| ?????????P(X,Y)
??????????|
??????????|
??????????Y ?
- 具有计算当前点到原点距离的功能
- 求到任意一点(m,n)的距离
- 具有坐标点显示功能,显示格式(x,y)
package com.nanchu.classpractice.question;
/**
?* @Author 南初
?* @Create 2024/1/15 18:42
?* @Version 1.0
?*/
public class FiveAxis {
????public double x,y,m,n;
????public FiveAxis(double x, double y, double m, double n) {
????????this.x = x;
????????this.y = y;
????????this.m = m;
????????this.n = n;
????}
????public void function1(double x,double y){
????????double distance;
????????distance = Math.sqrt(x*x+y*y);
????????System.out.println("距离原点距离:"+distance);
????}
????public void function2(double x,double y,double m,double n){
????????double distance;
????????distance =Math.sqrt(Math.pow(m-x,2)+Math.pow(n-y,2));
????????System.out.println("该店距离("+m+","+n+")的距离为:"+distance);
????}
????public void function3(double x,double y){
????????System.out.println("("+x+","+y+")");
????}
}
????public static void main(String[] args) {
????????FiveAxis axis = new FiveAxis(3,4,5,6);
????????axis.function1(axis.x,axis.y);
????????Scanner scan = new Scanner(System.in);
????????System.out.print("请输入坐标轴上的任意一点,例如1 2:");
????????double a= scan.nextDouble();
????????double b= scan.nextDouble();
????????axis.function2(a,b,axis.m,axis.n);
????????axis.function3(axis.x, axis.y);
????}
提供显示圆周长功能的方法
提供显示圆面积的方法
package com.nanchu.classpractice.question;
/**
?* @Author 南初
?* @Create 2024/1/15 18:29
?* @Version 1.0
?*/
public class FiveCircle {
????public double radius;
????public double getRadius() {
????????return radius;
????}
????public void setRadius(double radius) {
????????this.radius = radius;
????}
????public void Perimeter(double radius){
????????double perimeter;
????????perimeter = 2*3.14*radius;
????????System.out.println("该圆周长为:"+perimeter);
????}
????public void Area(double radius){
????????double area;
????????area = 3.14*radius*radius;
????????System.out.println("该圆的面积为:"+area);
????}
}
????@Test
????public void FiveCircleTest(){
????????FiveCircle circle = new FiveCircle();
????????circle.setRadius(3.0);
????????System.out.println("该圆的半径为:"+circle.getRadius());
????????circle.Perimeter(circle.radius);
????????circle.Area(circle.radius);
}
package com.nanchu.classpractice.question;
/**
?* @Author 南初
?* @Create 2024/1/15 18:21
?* @Version 1.0
?*/
public class SixBox {
????public double length;
????public double width;
????public double height;
????public SixBox(double length, double width, double height) {
????????this.length = length;
????????this.width = width;
????????this.height = height;
????}
????public void Volume(double length, double width, double height){
????????double volume=0;
????????volume = length*width*height;
????????System.out.println("该长方体体积为:"+volume);
????}
}
@Test
????public void SixBoxTest(){
????????SixBox box = new SixBox(4,3,5);
????????box.Volume(box.length,box.width, box.height);
????}
属性:品牌;价格;颜色;
方法:(1)编程的功能??(2)上网的功能
实例化两个对象:“lenovo”;“hasee”
package com.nanchu.classpractice.question;
/**
?* @Author 南初
?* @Create 2024/1/15 18:08
?* @Version 1.0
?*/
public class SevenComputer {
????public String brand;
????double price;
????String color;
????public SevenComputer(String brand, double price, String color) {
????????this.brand = brand;
????????this.price = price;
????????this.color = color;
????}
????@Override
????public String toString() {
????????return "{" +
????????????????"品牌='" + brand + '\'' +
????????????????", 价格=" + price +
????????????????", 颜色='" + color + '\'' +
????????????????'}';
????}
????public void Programme(String brand){
????????System.out.println(this.brand+"具有良好的编程功能!");
????}
????public void Internet(String brand){
????????System.out.println(brand+"具有良好的上网功能!");
????}
}
????@Test
????public void SevenComputer(){
????????SevenComputer computer1 = new SevenComputer("Lenovo",8000,"白色");
????????SevenComputer computer2 = new SevenComputer("Hasee",7000,"黑色");
????????System.out.println(computer1.toString());
????????computer1.Programme(computer1.brand);
????????computer1.Internet(computer1.brand);
????????System.out.println(computer2.toString());
????????computer2.Programme(computer2.brand);
????????computer2.Internet(computer2.brand);
????}
(1)具有属性:学号、姓名、年龄、性别、专业。
(2)具有方法:自我介绍,负责输出该学员的姓名、年龄、性别以及专业。
package com.nanchu.classpractice.question;
/**
?* @Author 南初
?* @Create 2024/1/15 17:19
?* @Version 1.0
?*/
public class EightStudent {
????int studentNumber;
????String name;
????int age;
????char sex;
????String career;
????public EightStudent(int studentNumber, String name, int age, char sex, String career) {
????????this.studentNumber = studentNumber;
????????this.name = name;
????????this.age = age;
????????this.sex = sex;
????????this.career = career;
????}
//学号、姓名、年龄、性别、专业
????@Override
????public String toString() {
????????System.out.println("{" +
????????????????"学号=" + studentNumber +
????????????????", 姓名='" + name + '\'' +
????????????????", 年龄=" + age +
????????????????", 性别=" + sex +
????????????????", 专业='" + career + '\'' +
????????????????'}');
????????return null;
????}
}
@Test
????public void EightStudentTest(){
????????EightStudent student = new EightStudent(204812,"王妍",18,'女',"艺术");
????????student.toString();
????}
???划分一:运行时数据区域; 程序计数器; Java虚拟机栈; 本地方法栈; 堆; 方法区;运行时常量池; 对象访问。
???划分二:栈区、堆区、静态区、代码区。
1、栈(stack):存放的都是方法中的局部变量。方法的运行一定要在栈当中
局部变量:方法的参数,或者是方法体{}中内部的变量
作用域:一旦超出作用域,立刻从栈内存中消失
2、堆(Heap):凡是new出来的东西,都在堆当中
堆内存里面的东西都有一个地址值:16进制
堆内存里面的数据,都有一个默认值。规则:
基本数据:整型,默认0;
浮点型,默认为0.0;
字符型,默认为‘\u0000’
布尔型,默认为false
引用类型数据:字符串、数组、对象,默认为null
3、方法区(Method Area):储存.class相关信息,包含方法的信息;
4、本地方法栈(Native Method Stack):与操作系统相关。
5、寄存器(pc Register):与CPU相关
1、程序计数器
????????CPU的计算时间是以分片的方式给到每个线程的,换句话说,所谓的并行其本质就是串行。比如线程A执行到了一部分,CPU将控制权给了线程B,那么线程A重新得到CPU的资源时,如何恢复工作呢?这个程序计数器就来帮助线程A找到其中间状态,从而恢复到正确的执行位置。程序计数器所占内存是线程私有的,同时也是Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。
2、JAVA虚拟机栈
????????它也是线程私有的,它所占有的内存空间也就是我们平时所说的“栈(stack)内存”。并且和线程的生命周期相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(StackFrame①)用于存储局部变量表(基本数据类型,对象的引用和returnAddress类型)、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
3、JAVA堆
????????JAVA堆一般是JVM管理的内存中大的一块,JAVA堆在主内存中,是被所有线程共享的一块内存区域,其随着JVM的创建而创建,堆内存的目的是存放对象实例。同时JAVA堆也是GC管理的主要区域。
????????如果从内存回收的角度看,由于现在收集器基本都是采用的分代收集算法,所以Java堆中还可以细分为:新生代和老年代;再细致一点的有Eden空间、FromSurvivor空间、ToSurvivor空间等。
????????如果从内存分配的角度看,线程共享的Java堆中可能划分出多个线程私有的分配缓冲区(ThreadLocalAllocationBuffer,TLAB)。
????????不过,无论如何划分,都与存放内容无关,无论哪个区域,存储的都仍然是对象实例,进一步划分的目的是为了更好地回收内存,或者更快地分配内存。
如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常。
4、本地方法栈
????????本地方法栈(NativeMethodStacks)与虚拟机栈所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native方法服务。虚拟机规范中对本地方法栈中的方法使用的语言、使用方式与数据结构并没有强制规定,因此具体的虚拟机可以自由实现它。甚至有的虚拟机(譬如SunHotSpot虚拟机)直接就把本地方法栈和虚拟机栈合二为一。与虚拟机栈一样,本地方法栈区域也会抛出StackOverflowError和OutOfMemoryError异常。
5、方法区
????????方法区也是各线程共享的一个内存区域。主要用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的应该是与Java堆区分开来。
????????Java虚拟机规范对这个区域的限制非常宽松,除了和Java堆一样不需要连续的内存和可以选择固定大小或者可扩展外,还可以选择不实现垃圾收集。相对而言,垃圾收集行为在这个区域是比较少出现的,但并非数据进入了方法区就如永久代的名字一样“永久”存在了。这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载,一般来说这个区域的回收“成绩”比较难以令人满意,尤其是类型的卸载,条件相当苛刻,但是这部分区域的回收确实是有必要的。
????????根据Java虚拟机规范的规定,当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常。
6、常量池
????????Class文件中除了有类的版本、字段、方法、接口等描述等信息外,还有一项信息是常量表(constant_pooltable),用于存放编译期已可知的常量,这部分内容将在类加载后进入方法区(永久代)存放(JDK1.7开始,常量池已经被移到了堆内存中)。
堆:存放的是引用数据类型;
栈: 存放的是基本数据类型;容量小、速度快、适合存放小型数据。
定义
栈是运行时单位,代表着逻辑,内含基本数据类型和堆中对象引用,所在区域连续,没有碎片;
堆是存储单位,代表着数据,可被多个栈共享(包括成员中基本数据类型、引用和引用对象),所在区域不连续,会有碎片。
1、功能不同
栈内存用来存储局部变量和方法调用,而堆内存用来存储Java中的对象。无论是成员变量,局部变量,还是类变量,它们指向的对象都存储在堆内存中。
2、共享性不同
栈内存是线程私有的, 堆内存是所有线程共有的。
3、异常错误不同
如果栈内存或者堆内存不足都会抛出异常。
栈空间不足:java.lang.StackOverFlowError。
堆空间不足:java.lang.OutOfMemoryError。
4、空间大小
栈的空间大小远远小于堆的。
1、数据类型
????????堆:堆用于存储Java对象实例,包括类的实例变量和实例方法。
????????栈:栈用于存储基本数据类型和对象引用。
2、分配方式和管理
????????堆:堆内存是在程序运行时动态分配的。Java的垃圾回收器自动管理堆内存,负责对象的分配和释放。对象在堆中分配,无需手动释放,垃圾回收器会自动识别并回收不再使用的对象。
????????栈:栈内存是按照固定的大小进行分配的,用于存储方法调用和局部变量。栈的管理是自动的,随着方法的调用和返回,栈帧的创建和销毁也会相应发生。
3、内存分配效率
????????堆:由于堆内存的动态分配机制,对象的创建和销毁可能会涉及到内存的分配和回收,因此堆的内存分配效率相对较低。
????????栈:栈内存的分配和释放都是通过指针的移动来实现的,效率较高。
4、内存空间
????????堆:堆内存的大小通常比栈大,可以通过调整JVM的堆内存参数来进行配置。
????????栈:栈的大小在程序运行前就被确定,并且通常比堆的大小小得多。
5、数据周期
????????堆:堆中的对象生命周期由程序员控制,当对象不再被引用时,垃圾回收器会在适当的时候回收它们。
????????栈:栈中的数据周期与方法的调用和返回相关联,当方法执行结束时,栈帧会被销毁,栈上的数据也随之消失。
????????总的来说,堆用于存储对象,由垃圾回收器自动管理内存,而栈用于存储基本数据类型和对象引用,具有自动的分配和释放机制。了解堆和栈的区别对于正确使用和管理内存是非常重要的。