Day7
*
* static jdk7在方法区,jdk8之后在堆上
* 但是也是拿到了地址,而不是拷贝了值。
*
* 在类加载的最后一步进行初始化
*
* 使用场景:
* static 修饰
*
* //statci想访问成员方法怎么办
* 创建对象呗?!!!!!
*
* 不管是什么方法, 不存在静态局部变量
*
* 匿名对象:
* 没有接收的对象,不能重复调用方法,适合调用一次方法。
* this调用构造器必须在第一行
* 构造代码块:
* 依赖于构造方法的执行。
* 使用场景:当每个构造器都需要执行的语句,可以提取出来,放到构造代码块中。
*
* 静态代码块:用static修饰的构造代码块
* static{}
* 类加载的时机:
* 1.new的时候
* 2.调用类的静态成员、方法时。
* 3.调用某个类的main方法
* final static 会在常量池中,编译时就进去了,不需要类加载
* final static方法 会进行类加载,没有常量池存他。
*
* 只有public修饰的类才能用main方法
*
* 访问权限修饰符:
* 1.修饰类中成员的
* public protected default(什么都不写,缺省状态,默认的),private
2.修饰类
class A 默认权限
public class
封装
为啥布尔类型不建议使用isMale?
不希望外界随意修改
private boolean isMale;//不推荐
生成访问方法时,和访问方法重名。
-
创建两个类,分别用来表示长方形和正方形,同时定义所需的成员变量,
代表长方形或者正方形的边长,在两个类中分别定义两个方法,用来求对应形状的面积和周长,
并定义相应的get,set方法,获取和改变方形和正方形的变长。
package com.jiang.work.Day7;
/**
* ============================
* 一定要注意命名规则
* 一定要注意命名规则
* 一定要注意命名规则
* ============================
* TODO
*
* @version 1.0
* @Description: 创建两个类,分别用来表示长方形和正方形,同时定义所需的成员变量,
* @author: https://github.com/cqpsjsl
* @date: 2021/1/7 19:31
*/
/**
*
* 1. 创建两个类,分别用来表示长方形和正方形,同时定义所需的成员变量,
*
* 代表长方形或者正方形的边长,在两个类中分别定义两个方法,用来求对应形状的面积和周长,
*
* 并定义相应的get,set方法,获取和改变方形和正方形的变长。
*/
public class WorkOne {
public static void main(String[] args) {
//创建对象
//长方形
Rectangle rectangle = new Rectangle();
//正方形
Square square = new Square();
//设置长方形长宽
rectangle.setLongs(3);
rectangle.setWidth(6);
//设置正方形边长
square.setSideLength(8);
//输出长方形信息
System.out.println("长方形的长是: " + rectangle.getLongs());
System.out.println("长方形的宽是: " + rectangle.getWidth());
System.out.println("长方形的周长是: " + rectangle.perimeter());
System.out.println("长方形的面积是: " + rectangle.area());
//输出正方形信息
System.out.println("正方形的边长是: " + square.getSideLength());
System.out.println("正方形的周长是: " + square.perimeter());
System.out.println("正方形的面积是: " + square.area());
}
}
package com.jiang.work.Day7;
/**
* ============================
* 一定要注意命名规则
* 一定要注意命名规则
* 一定要注意命名规则
* ============================
* TODO
*
* @version 1.0
* @Description: 正方形
* @author: https://github.com/cqpsjsl
* @date: 2021/1/7 19:33
*/
public class Square {
private double sideLength;
public double getSideLength() {
return sideLength;
}
public void setSideLength(double sideLength) {
this.sideLength = sideLength;
}
public double area() {
return sideLength * sideLength;
}
public double perimeter() {
return 4*sideLength;
}
}
package com.jiang.work.Day7;
/**
* ============================
* 一定要注意命名规则
* 一定要注意命名规则
* 一定要注意命名规则
* ============================
* TODO
*
* @version 1.0
* @Description: 长方形
* @author: https://github.com/cqpsjsl
* @date: 2021/1/7 19:32
*/
public class Rectangle {
private double longs;
private double width;
public double getLongs() {
return longs;
}
public void setLongs(double longs) {
this.longs = longs;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double area() {
return longs * width;
}
public double perimeter() {
return 2*(longs+width);
}
}
运行结果:
长方形的长是: 3.0
长方形的宽是: 6.0
长方形的周长是: 18.0
长方形的面积是: 18.0
正方形的边长是: 8.0
正方形的周长是: 32.0
正方形的面积是: 64.0
Process finished with exit code 0
-
在com.cskaoyan.a包下,定义一个名为MyClazz的类如下
public class MyClazz { public void hello() { System.out.println("a包"); } }同时,在com.cskaoyan.b包下,一个类名也为MyClazz
public class MyClazz { public void hello() { System.out.println("b包"); } }同时在com.cskaoyan.b包下定义一个Test类如下:
public class Test { public void static main(String[] args) { MyClazz myClazz = new MyClazz(); myClazz.hello(); } }毫无疑问,当执行Test中的main方法的时候输出的是: b包
先要求,在不改变Test main方法中代码的情况下,让main方法运行之后输出 a包,应该怎么做?
答:
import com.cskaoyan.a.MyClazz
- 定义一个Student类,并要求其他类在使用Student类的时候,最多只能创建10个Student类的对象,如何实现?
提示: 首先,要实现该功能,就不能让外部类直接使用
new Student(...)的方式来创建对象,如何不能让其他类new Student(...),
只需将Student类的所 有构造方法的,权限改为private即可。
接着,把创建对Student对象的工作,交给一个专门的方法去做(想想这个方法应该是怎样的方法)
活用static和访问权限修饰符
package com.jiang.work.Day7;
/**
* ============================
* 一定要注意命名规则
* 一定要注意命名规则
* 一定要注意命名规则
* ============================
* TODO
*
* @version 1.0
* @Description: 定义一个Student类,并要求其他类在使用Student类的时候,最多只能创建10个Student类的对象
* @author: https://github.com/cqpsjsl
* @date: 2021/1/7 19:55
*/
public class WorkThr {
public static void main(String[] args) {
Student s = Student.createStudent();
Student s1 = Student.createStudent();
Student s2 = Student.createStudent();
}
}
package com.jiang.work.Day7;
/**
* ============================
* 一定要注意命名规则
* 一定要注意命名规则
* 一定要注意命名规则
* ============================
* TODO
*
* @version 1.0
* @Description: Student
* @author: https://github.com/cqpsjsl
* @date: 2021/1/7 19:55
*/
public class Student {
private String name;
private int age;
private static int count = 0;
private Student() {
}
private Student(String name) {
this.name = name;
}
private Student(int age) {
this.age = age;
}
private Student(String name, int age) {
this.name = name;
this.age = age;
}
public static Student createStudent() {
if (count < 2) {//0 1 2
count++;
System.out.println("创建了一个学生类");
return new Student("张三"+count);
}else{
System.out.println("学生类达到上限!");
}
return null;
}
}
运行结果:
创建了一个学生类
创建了一个学生类
学生类达到上限!
Process finished with exit code 0
4.
学习记录,并不保证内容的准确性。
浙公网安备 33010602011771号