Scanner类的使用
从键盘获取不同类型的变量:需要使用Scanner类
具体实现步骤:
1.导包:import java.util.Scanner;
2.Scanner的实例化:Scanner scan = new Scanner(System.in);
3.调用Scanner类的相关方法,获取制定指定的变量
//1.导包:import java.util.Scanner;
import java.util.Scanner;
class ScannerTest {
public static void main(String[] args) {
//2.Scanner 的实例化
Scanner scan = new Scanner(System.in);
//3.调用Scanner类的相关方法
System.out.println("姓名");
String name = scan.next();
System.out.println(name);
System.out.println("年龄");
int age = scan.nextInt();
System.out.println(age);
System.out.println("体重");
double weight = scan.nextDouble();
System.out.println(weight);
System.out.println("是否要和我谈恋爱?true/false");
boolean isLove = scan.nextBoolean();
System.out.println(isLove);
//对于char型的获取,Scanner没有提供相关的方法。只能获取一个字符串
System.out.println("性别");
String sex = scan.next();
char sexChar = sex.charAt(0);//获取索引位置为0上的字符
System.out.println(sexChar);
}
}
衡量一个功能代码的优劣:
1.正确性
2.可读性
3.健壮性
4.高效率和低存储
属性赋值顺序
(1)默认初始化
(2)显式初始化
(3)构造器中初始化
(4)有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值
执行的先后顺序:(1)-(2)-(3)-(4)
JavaBean
1.JavaBean是一种java语言写成的可重用组件
2.所谓JavaBean,是指符合标准的java类
-
类是公共的
-
有一个无参的公共的构造器
-
有属性,且有对应的get、set方法
可以对属性赋值的位置:
(1)默认初始化
(2)显式初始化
(3)构造器中初始化
(4)有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值
(5)在代码块中赋值
执行的先后顺序:(1)-(2)/(5)-(3)-(4)
java中的junit单元测试
步骤:
1.选中当前工程-右键:build path -add libraries - JUnit - 下一步
2.创建java类,进行单元测试
此时的java类要求:①此类是public的 ②此类提供公共的午餐的构造器
3.此类中声明单元测试方法
此类的单元测试方法,方法的权限是public,没有返回值,没有形参
4.此单元测试方法上需要声明注解:@Test,并在单元测试类中导入import org.junit.Test;
5.声明好单元测试方法后,就可以在方法体内测试相关的代码
6.写完代码以后,左键双击单元测试方法名,右键:run as - JUnit Tesy
说明:
1.如果执行没有任何异常:绿条
2.如果执行出现异常:红条
设计模式
1、设计模式的说明
1.1理解:设计模式时在大量的实践中总结和理论化之后的代码结构、编程风格、以及解决问题的思考方式。
1.2常用设计模式----23种经典的设计模式
2.单例模式
2.1要解决的问题:所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例。
优点:减少了系统性能开销
2.2具体代码的实现:
饿汉式:
class Bank{
//1.私有化类的构造器
private Bank() {
}
//2.内部创建类的对象
//4.要求此对象也必须声明为静态的
private static Bank instance = new Bank();
//3.提供公共的静态方法,返回类的对象
public static Bank getInstance() {
return instance;
}
}
使用了静态代码块的饿汉式:
class Order{
//1.私有化类的构造器
private Order() {
}
//2.内部创建类的对象
//4.要求此对象也必须声明为静态的
private static Order instance = null;
static{
instance = new Order();
}
//3.提供公共的静态方法,返回类的对象
public static Order getInstance() {
return instance;
}
}
懒汉式:
class Order{
//1.私有化类的构造器
private Order() {
}
//2.内部创建类的对象
//4.要求此对象也必须声明为静态的
private static Order instance = null;
//3.提供公共的静态方法,返回类的对象
public static Order getInstance() {
if(instance == null){
instance = new Order();
}
return instance;
}
}
线程安全的懒汉式:
public class BankTest {
}
class Bank{
private Bank(){}
private static Bank instance = null;
public static Bank getInstance() {
// 方式一:效率差
// synchronized (Bank.class) {
// if (instance == null) {
// instance = new Bank();
// }
// return instance;
// }
// 方式二
if (instance == null) {
synchronized (Bank.class){
if (instance == null) {
instance = new Bank();
}
}
}
return instance;
}
}
2.3懒汉式、饿汉式对比
饿汉式:
- 坏处:对象加载时间过长
- 好处:饿汉式是线程安全的
饿汉式:
- 好处:延迟对象的创建
- 坏处:线程不安全
2.4应用场景:网站的计数器、应用程序的日志应用、数据库连接池等
标题总结:一叶知秋
public static void main(String[] args) {//方法体}
权限修饰符:private 缺省 protected public —>封装性
修饰符:static \ final \ abstract \ native 可以用来修饰方法
返回值类型:无返回值 / 有返回值–>return
方法名:需要满足便是福命名的规则、规范:“见名知意”
形参列表:重载 / 重写:参数的值传递机制:体现对象的多态性
方法体:体现方法的功能
内存结构:
进程可以细化为多个线程。
每个线程,拥有自己独立的:栈、程序计数器。
多个线程,共享同一个进程中的结构:方法区、堆。