从入门到放弃的第二周(面向对象)......day.8.。。。。。单例模式,重载,封装,包装;
1,设计模式(Design Pattern)之单例模式(Singleton)
作用:保证一个系统(单JVM)中只有一个实例
实现方式:首先确保构造方法使用private修饰
1,懒汉式:在第一次获取实例是才实例化,注意线程的安全性
public class Singleton {
private Singleton() {
}
private static Singleton singleton;
public static Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
2,饿汉式:第一次使用该类时,就会实例化,线程安全,但是性能稍差
public class Singleton {
private Singleton() {
}
public static int num=0;//即使访问num,其他的静态属性(如singleton)也会被初始化
private static Singleton singleton = new Singleton();
public static Singleton getInstance() {
return singleton;
}
}
2,封装(Encapsulation)
将实现的细节封装起来,提供一些公共的接口供外部访问
作用:安全,简化调用
实现:使用访问控制修饰符
3,包装类
- int Integer
- long Long
- short Short
- float Float
- double Double
- byte Byte
- char Character
- boolean Boolean
思路;类的作用或功能,如何实例化,初始化,
提供的方法:作用,参数,返回值
Integer:对int包装,
方法:int num2=Integer.parseInt("123"); 将字符串转换为整数
自动装箱与自动拆箱 JDK1.5 支持 J2EE J2SE Jakarta EE
自动装箱:基本数据类型自动转换为对应的包装类
自动拆箱:包装类自动转换为对应的基本数据类型
任务:判断某个字符是不是数字?
char a='a';
char b='1'; 找一个包装类,调用其中某个方法
面试题:
Integer num1=100;
Integer num2=100;
System.out.print(num1==num2);
变量的值在-128-127之间,,结论是true,否则是false
4,方法重载(overload)
在一个类中,方法的名称一样,但是参数列表不同
在方法的形式参数是基本类型时,按照基本类型 的范围依次调用方法,如果没有基本类型,则调用参数为对应包装类的方法,如果没有对应的包装类型,则调用包装类的父类型作为参数的方法
5,this
代表当前的实例(instance)
this不能用于静态作用域(方法,代码块)
使用场景:
1,用于实例方法,可以访问到该实例的属性或方法 this.属性/方法
2,用于构造方法,可以访问该类的其他重载的构造方法 this(参数) 必须出现在第一行
1,声明一个类(Point),代表二维坐标上的一个点,具有属性x,y,分别表示横坐标和纵坐标
要求使用构造方法对其属性赋值:一种是无参的,默认将x,y赋值为0
第二种,接收两个参数,分别为x,y赋值
2,声明一个操作Point的类,声明方法:
2.1 计算一个点离原点的距离 Math.sqrt
2.2 计算任意两个点的距离
public double getInstant(Point p1,Point p2){
}
2.3 判断两个点是否在一条水平线上
2.4 判断三个点是否在一条直线上
3,编写测试类
public class Point {
public Point() {
this.x = 0;
this.y = 0;
}
public Point(double num1, double num2) {
this.x = num1;
this.y = num2;
}
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(double y) {
this.y = y;
}
private double x;
private double y;
}
public class Pointmaker {
public void pt(Point p) {
double juli = (p.getX() * p.getX() + p.getY() * p.getY());
double x = Math.sqrt(juli);
System.out.print(x);
}
public void pt(Point p, Point q) {
double juli = (p.getX() - q.getX()) * (p.getX() - q.getX()) + (p.getY() - q.getY()) * (p.getY() - q.getY());
double x = Math.sqrt(juli);
System.out.print(x);
}
public void pts(Point p, Point q) {
if (p.getY() == q.getY()) {
System.out.println("yes");
} else {
System.out.println("no");
}
}
public void pt(Point p, Point q, Point z) {
if ((p.getY() / p.getX()) == (q.getY() / q.getX()) && (p.getY() / p.getX()) == (z.getY() / z.getX())) {
System.out.println("yes");
} else {
System.out.println("no");
}
}
}
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Pointmaker pointtest = new Pointmaker();
Point point1 = new Point(3, 4);
Point point2 = new Point(6, 8);
Point point3 = new Point(9, 12);
pointtest.pt(point1);
pointtest.pt(point1, point2);
pointtest.pt(point1, point2, point3);
pointtest.pts(point1, point2);
double x = Math.pow(2, 2);
System.out.print(x);
}
}
这一章除了单例模式和面试的那个范围有点绕,其他的都不算很难。


浙公网安备 33010602011771号