JAVA核心技术第三章末第四章初

重要:

String buffer安全内部有安全锁是String builder安全版本

String和StringBuilder 和StringBuffer的区别?

多线程下buffer比builder安全 比String快

单线程速度是最快的 用String builder最快

输入和输出

计算器

import java.util.*;
public class aa{
    public static void main(String[] args){
        System.out.println("欢迎使用计算器,请选择计算类型");
        System.out.println("1.加法 2.减法 3.乘法 4.除法  请输入数字类型");
        Scanner scanner = new Scanner(System.in);
        int flag = scanner.nextInt();
        switch(flag){
        case 1:
        System.out.println("您选择的是加法运算");
        break;
        case 2:
        System.out.println("您选择的是减法运算");  
        break;
        case 3:
        System.out.println("您选择的是乘法运算");  
        break;
        case 4:
        System.out.println("您选择的是除法运算");  
        default:
        System.out.println("计算类型错误"); 
        return;
       }
      System.out.println("请输入要计算的两个数字");
      Scanner scanner1 = new Scanner(System.in)
      Scanner scanner2 = new Scanner(System.in)
      int x1 = scanner1.nextInt();
      int x2 = scanner2.nextInt();
              switch(flag){
        case 1:
        System.out.println("计算结果: "+ (a+b));
        break;
        case 2:
        System.out.println("计算结果: "+ (a-b));  
        break;
        case 3:
        System.out.println("计算结果: "+ (a*b));  
        break;
        case 4:
        System.out.println("计算结果: "+ (a/b));  
        default:
        System.out.println("计算类型错误"); 
        return;
       }
   }
}

 

import java.util.*;
public class InputTest{
    public static void main(String[] args){
    Scanner in = new Scanner(System.in);
    //get first input
    System.out.println("What is your name?");
    String name = in.nextLine();
    //get second input
    System.out.println("How old are you?");
    int age = in.nextInt();
   //display output on console
   System.out.println("Hello, " + name +".Next year,you will be" +(age+1));

}
}

 格式化输出

按照某种格式输出

System.out.printf("#####%s#####%d#####%s#####","哈哈哈",35,"我好");

 数字转字符串类型是单向的 数字加字符串还是字符串 字符串类型转数字转不了

块作用域
变量在哪个块中声明的,出了这个块就没作用了

文件存储信息要制定编码

获取当前文件在磁盘上的路径

String dir = System.getProperty(user.dir);

Switch语句

case 标签可以是:

  • 类型为 char、byte、 short 或 int 的常量表达式。
  • 枚举常量。
  • 从 Java SE 7开始, case 标签还可以是字符串字面量。
import java.util.*;

public class Test6{

public static void main(String[] args){

Scanner in = new Scanner(System.in);

System.out.print("How much money do you need to retire?");

double goal = in.nextDouble();

System.out.print("How much money will you contribute every year?");

double payment = in.nextDouble();

System.out.print("Interest rate in %:");

double interestRate = in.nextDouble();

double balance = 0;

int years = 0;

while(balance

balance += payment;

double interest = balance *interestRate / 100;

years++;

}

System.out.println("You can retire in"+years+"years.");

}

}

大数值

想做数值的精确计算 整数用BigInteger 小数用BigDecimal

import java.util.*;

import java.math.*;

public class Test6{

public static void main(String[] args){

BigInteger aa = new BigInteger("2500000000000000000");

BigInteger bb = new BigInteger("1500000000000000000");

BigInteger cc = aa.add(bb);

BigInteger dd = aa.multiply(bb);

BigInteger ee = aa.subtract(bb);

BigInteger ff = aa.divide(bb);

System.out.println(cc);

System.out.println(dd);

System.out.println(ee);

System.out.println(ff);

}

}

第四章对象和类

任何东西运行都在内存中运行

单个进程所占据的空间是一个块

内存中不同进程占领不同区域 各自占领后互不干扰

申请空间其实是申请了一个数组、

 

程序可能物理程度上不在一块区域 每一个块中有一个区域存储各种地址

与其他块之间产生联系

单独的进程占据的一个空间叫块本质上是二维数组

 

.class信息进入内存后首先把内存存到方法区

方法区里面有静态区

静态区中方法可以直接被调用 在进入内存时已经有了自己的空间

方法执行依赖栈 申请到栈结构里面申请子栈 复制发过去形成子栈开始执行

  • 控制方法执行顺序
  • 变量的定义域

方法执行依赖栈 申请到栈结构里面申请子栈 复制发过去形成子栈开始执行

栈执行时会在大栈中申请一个子栈 是方法执行的载体

执行主方法拷贝过来进入子栈 如果在原来地方直接执行当有多个进程使用主方法会有干扰

方法执行依赖栈 申请到栈结构里面申请子栈 复制发过去形成子栈开始执行

子栈就是数据结构里面的先入后出的栈

线程的执行依赖栈


程序计数器

控制什么时候入栈 什么时候出栈

 

类中非静态内容每个对象都有一份

带static只在在静态存储标记区

面向对象简称OOP

类的特性

  • 封装
  • 继承
  • 多态
  • 抽象

创建类的实例就是创建类的对象

属性就是实例域

变量一定在栈中 对象一定在堆中

引用类型 = 是引用地址

预定义类

Java本身自带的叫预定义类

Java中是按值传递的(非常重要)

引用传递传递的是栈的地址 但是其实传递的是堆里面值的地址

  • 按值传递:将方法参数值复制到另一个变量,然后传递复制的对象,将其称为按值传递。
  • 按引用传递:将对实际参数的别名或引用传递给方法,将其称为按引用传递的原因。

 

public void setAge(int a){ age = a;} 对private写 更改器

public void getAge(int a){ age = a;} 读 访问器

可以控制他可读可写

多线程执行其实是CPU快速切换 不一定先执行谁 优先级越高被选中几率越大

操作系统本身没有线程池

public class Test6{

public static void main(String[] mmm){

Thread t1 = new Thread(){

@Override

public void run(){

System.out.println("1");

}

};

Thread t2 = new Thread(){

@Override

public void run(){

System.out.println("2");

}

};

t1.start();

t2.start();

System.out.println("3");

}

}

start : 就绪 不能够立即执行 会打断CPU进程对别的进程破坏

多线程下其中一个线程对数据进行修改其他线程可能会出错 读取结果产生影响

访问器保证安全要加代码 如果直接用return没有任何安全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值