String a =“abc” //abc会在方法区的常量池中创建
String a2=new String(“def”)//def会在常量池中创建 也会在(heap)堆中创建 需要创建两个 使用不推荐使用
面试题
判断底下创建几个对象 3个 堆中2个 常量池1个
String b1=new String(“def”)
String b2=new String(“def”)
public class HelloWorld {
// 静态常量
public static final double PI = 3.14;
// 声明成员常量
final int y = 10;
public static void main(String[] args) {
// 声明局部常量
final double x = 3.3;
}
}
public class test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int i=1;//基本数据类型
Integer j=new Integer(i);//引用数据类型
m1(j);
m1(i);//这样也可以
}
public static void m1(Object o){
System.out.println(o); //调用tostring方法 并且重新
}
}
public class test {
/**
* @param args
* stringbuffer stringbuilder 字符缓冲区
* 推荐字符串拼接使用
* 预先申请一块空间(16默认空间) 空间不够自动扩展
* 底层是char数组
* 优化 因为数组一旦创建无法改变长度 如果要改变需要频繁的从一个数组复制到另外一个数组 所以 需要预判数组大小 提高效率
*
* Stringbuffer 是线程安全的(可以在多线程下使用不会出现问题)
* stringbuilder 是线程不安全的(在多线程下使用可能出现问题)
*/
public static void main(String[] args) {
// TODO Auto-generated method stub 字符串拼接 用逗号隔开
StringBuffer sb=new StringBuffer();//默认16的长度
// StringBuffer sb1=new StringBuffer(30);//传入30的长度
String ins[]={"数学","英语","语文"};
for(int i=0;i<ins.length;i++){
if(i==ins.length-1){
sb.append(ins[i]);
}else{
sb.append(ins[i]);
sb.append(",");
}
}
System.out.println(sb);
}
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class test {
/**
* @param args
* 日期SimpleDateFormat
* 日历calander
*
*/
public static void main(String[] args) {
// TODO Auto-generated method stub 字符串拼接 用逗号隔开
Date d=new Date(); //获取当前时间
System.out.println(d);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd");//数字格式转换格式 date—>String
System.out.println(sdf.format(d));
String strdate="2008-08-08";
try {
Date t=sdf.parse(strdate);//String—>date
System.out.println(t);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Date d2=new Date(System.currentTimeMillis()-1000*60*10);//系统当前时间的前10分钟
System.out.println(d2);
// 获取当前时间的星期几
// 先向系统获取日历
Calendar c=Calendar.getInstance();
// 查看星期几
int i=c.get(Calendar.DAY_OF_WEEK);
System.out.println(i);
// 查看2008.8.8是星期几
String s="2008-08-08";
try {
Date d4=new SimpleDateFormat("yyyy-mm-dd").parse(s);//转换成日期型
c.setTime(d4);//转换成日历型
System.out.println(c.get(Calendar.DAY_OF_WEEK));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
千分位
DecimalFormat df=newDecimalFormat("###,###")
System.out.println(df.format(1234567)) //1,234,567
千分位 保留两位小数
DecimalFormat df=newDecimalFormat("###,###.##")
千分位 保留4位小数 不够补0
DecimalFormat df=newDecimalFormat("###,###.0000")
java.math.BigDecimal 精确度极高 适合做财务软件
BigDecimal v1 =new BigDecimal(10)
BigDecimal v2 =new BigDecimal(10)
BigDecimal v3=v1.add(v2)
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class test1 {
/**
* @param args
* FileInputStream 文件字节输入流
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
FileInputStream fis=null;
try {
fis =new FileInputStream("test.txt"); //创建输入流
// int i=fis.read(); //读取文件中的第一个英文 字节形势 所以打印97
// while(i!= -1){
// System.out.println(i);
// i=fis.read();
// }
//
// 读的第二种方法
byte bytes[]=new byte[1024];
int i2=fis.read(bytes);
System.out.println(i2); //有3个元素
System.out.println(new String(bytes,0,i2)); //转换成字符串 从第0个开始 转到第 i2 元素
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
public class test2 {
/**
* @param args
* FileOutputStream 文件字节输出流
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
String i=sc.next();
FileOutputStream fos =null;
// fos=new FileOutputStream("test2.txt"); //覆盖的方式写
fos=new FileOutputStream("test2.txt",true); //添加的方式写
// String msg ="Hello";
byte bytes[] =i.getBytes();
fos.write(bytes); //写
fos.flush(); //强制写入 刷新
if(fos != null){
fos.close();
}
}
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class test3 {
/**
* @param args
* FileReader 文件字符输入流 可以直接读取一个文字
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
FileReader fr=null;
try {
fr =new FileReader("test3.txt"); //创建输入流
char bytes[]=new char[1024];
int i2=fr.read(bytes);
System.out.println(i2); //有3个元素
System.out.println(new String(bytes,0,i2)); //转换成字符串 从第0个开始 转到第 i2 元素
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class test4 {
/**
* @param args
* FileWriter 文件字节输出流
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileWriter fw =null;
// fos=new FileOutputStream("test2.txt"); //覆盖的方式写
fw=new FileWriter("test2.txt",true); //添加的方式写
// String msg ="Hello";
fw.write("船袜"); //写
fw.flush(); //强制写入 刷新
if(fw != null){
fw.close();
}
}
}
public class test1 {
/**
* @param args
*
* 多线程
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread t=new Processor(); //创建线程
t.start();//线程启动
for (int i = 0; i < 10; i++) { // main 方法结束 程序还在执行
System.out.println("2");
}
}
}
//定义一个线程
class Processor extends Thread{
// 重写run方法
public void run(){
for (int i = 0; i < 100; i++) {
System.out.println("1");
}
}
}
public class test2 {
/**
* @param args
*
* 多线程
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread t=new Thread(new Processor2()); //创建线程
t.start();//线程启动
for (int i = 0; i < 10; i++) { // main 方法结束 程序还在执行
System.out.println("2");
}
}
}
//定义一个线程
class Processor2 implements Runnable{
// 重写run方法
public void run(){
for (int i = 0; i < 100; i++) {
System.out.println("1");
}
}
}
如果数据在(-128~127)之间,java 中引入了一个“整型常量池”,在方法区中
整型常量池中只存储集合中的数 ,没有超过集合的都在里面拿。
integer i5=127
integer i6=127 //内存地址一样 因为在集合区间
integer i5=-128
integer i6=-128 //内存地址一样 因为在集合区间
integer i5=128
integer i6=128 //内存地址不一样 因为不在集合区间