常用java编程代码汇总

目录

文件的读取和写入:

synchronization线程锁:

单例模式:

反射



前言

因工作问题,有些代码常常需要使用,为了方便,整理如下。

文件的读取和写入:

import java.io.File;  
import java.io.InputStreamReader;  
import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.FileInputStream;  
import java.io.FileWriter;  
  
public class FileReadAndWrite {  
    public static void main(String args[]) {  
        // 绝对路径或相对路径都可以,这里是绝对路径,写入文件时演示相对路径
        String readFilePath = "D:/input.txt";
        String writeFilePath = "D:/output.txt";
        // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw  
        try { 
            /* 读文件 */  
            File filename = new File(readFilePath); // 要读取以上路径的input.txt文件  
            if(!filename.exists()) {
            	System.out.println("读取失败,文件不存在!");
            }else {
            	// 建立一个输入流对象reader 
            	InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(filename));  
            	// 建立一个对象,它把文件内容转成计算机能读懂的语言  
	            BufferedReader reader = new BufferedReader(inputStreamReader);
	            String line = "";  
	            while ((line = reader.readLine()) != null) {  
	                //line:一次读入一行的数据  
	                System.out.println(line);
	            }  
	            reader.close();
            }
            
            
            /* 写文件 */  
            File writeFileName = new File(writeFilePath); // 相对路径,如果没有则要建立一个新的output.txt文件  
            if(!writeFileName.exists()) {
            	writeFileName.createNewFile(); // 创建新文件  
            }
            FileWriter fileWriter = new FileWriter(writeFileName);
            //FileWriter fileWriter = new FileWriter(writeFile,true);     //true,代表着追加写入,不会讲之前已经录入的内容覆盖
            BufferedWriter write = new BufferedWriter(fileWriter);  
            write.write("该字符串写入成功!\r\n"); // \r\n即为换行  
            write.flush(); // 把缓存区内容压入文件  
            write.close(); // 最后记得关闭文件  
  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}  

 

synchronization线程锁:

package jinCheng;
public class TestBank {
    public static void main(String[] args) {
        Bank bank = new Bank();
        Thread yangkang = new Thread(bank,"杨康");
        Thread guojing = new Thread(bank,"郭靖");
        yangkang.start();
        guojing.start();
    }	
}
class Bank implements Runnable{
    private int money = 0;
    public void setMoney() {
        money += 100;
        System.out.println(Thread.currentThread().getName()
                + "存了100,余额:"+money);
    }
    public void run() {
        try {
            for(int i = 1;i<=3;i++) {
                synchronized (this) {
                    setMoney();
                }
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

单例模式:

package danli;

public class SingletonTest {
    public static void main(String[] args) {
        Singleton singleton1 = Singleton.getSingleton();
        Singleton singleton2 = Singleton.getSingleton();
        System.out.println(singleton1);
        System.out.println(singleton2);
    }
}
/**
  * 懒汉式单例模式
  * 双检锁/双重校验锁(DCL,即 double-checked locking)
  是否Lazy初始化:是
  是否多线程安全:是
  描述:这种方式采用双锁机制,安全且在多线程情况下能保持高性能。
  getInstance() 的性能对应用程序很关键。
 */
class Singleton{
    private volatile static Singleton singleton;
    private Singleton() {}
    public static Singleton getSingleton() {
        if(singleton == null) {
            synchronized(Singleton.class) {
                if(singleton==null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

反射

public class testPersonReflect {
	public static void main(String[] args) {
		//获取class对象
		Class p=Person.class;
		//获取属性    获取所有的属性  包括私有的
		Field[] fields = p.getDeclaredFields();
		//获取属性  只能返回  公有的
		Field[] fields2 = p.getFields();
		System.out.println("=================");
		for(Field f:fields){
			System.out.println(f);
		}
		System.out.println("--------------");
		for(Field f:fields2){
			System.out.println(f);
		}
		//参数表示的是属性的名字
		Field field = p.getField("name");
		System.out.println(field.getName());	
		//方法
		/**
		 * 参数1:方法名
		 * 参数2:方法需要的参数
		 * 获取的方法是共有的方法
		 */
		Method method = p.getMethod("eat", int.class,double.class);
		System.out.println(method.getName());
		
		//构造方法
		Constructor[] constructors = p.getConstructors();
		for(Constructor c:constructors){
			System.out.println(c);
		}
		//参数指的是构造方法的参数类型
		Constructor constructor = p.getConstructor(String.class,int.class);
		System.out.println(constructor);
		
		//通过反射创建对象  获取构造方法  参数:创建对象的时候给构造方法穿的参数
		//new Person("tt",34)
		
		Person person = (Person)constructor.newInstance("sanpang",45);
		System.out.println("age"+person.getAge());
		System.out.println("name"+person.getName());
		
		//设置属性的值
		//person.setAge(56);
		//System.out.println(person.getAge());
		//p.getField("name")  获取属性   set(obj, value);给属性复制
		//p.name=
		//set的两个参数  参数1:对象  参数2:属性的值
		p.getField("name").set(person, "xiaohuahua");
		System.out.println(person.getName());
		
		/*p.getField("age").set(person, 109);
		System.out.println(person.getAge());*/
		Field declaredField = p.getDeclaredField("age");
		//将私有属性的赋值权限打开
		declaredField.setAccessible(true);
		declaredField.set(person, 109);
		System.out.println(person.getAge());		
		//方法调用
		Method m01=p.getMethod("eat", int.class,double.class);
		//person.eat(4, 5.6);
		//参数1  对象  参数2:方法的参数
		m01.invoke(person, 18,0.0);		
	}
}

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值