个人java学习心得总结

学习心得

(第一次使用csdn的编辑器,很多功能不熟悉,慢慢学,慢慢用把)

为什么决定走上java的道路

这次疫情应该是导致我决定重新学java的主要原因。作为一名大三的学生,平时也没有特别的爱好,也就偶尔打打游戏,弹弹吉他,追追剧,刷刷b站而已。当然了也没有什么特长,硬要说特长的话,也就游戏打的比别人好点。今年下半年就大四了,一想着平平无奇的自己又不是什么好学校出来的学生,也没什么技术,出到社会后那可能就真的怕饭都吃不饱。想着找一份本专业的工作,最好是工资高点的,因为这样未来才有盼头。可惜我看b站上面的很多面试的视频和很多dalao的程序就觉得自己出去可能像个废人,下定决心把java学懂,至少能达到中级工程师的水平。

学习感受

说真的,如果是我自己一人学习的话,没有绝对的兴趣真的学不下去,更不可能谈得上去熟练掌握,所以我决定找个靠谱的地方学习。目前看来找到的可以说的上是靠谱。每天学习就把所有的时间占满了,虽然野有生活方面的琐事困扰了我一段时间,但至少能挺过来的都不是太大的问题。很多事情现在不经历,日后工作了也难免会遇到。

目前收获

学到现在我觉得最大的改变就是知识体系的变化,我能够明确感觉到我在看程序和写程序的思路变了很多:之前是乱几把写,能编出来就行。现在的我至少会想着如何优化程序,以面向对象的思路去编写一个程序,把重复的代码放到一个方法中,调用方法就行。
然后就是了解了一点底层的原理,包括jvm虚拟机的运行,类创建的先后顺序,堆栈大致是如何创建的,并且和程序的关联。对象的创建过程,垃圾回收机制,调用方法和方法中的对象在jvm中的大致过程,
虽然确实对于底层这只是一点点,但是能摸到门槛就是好的。
慢慢的开始学着去看源码,慢慢的看文档了解java中真的是像海一般的方法和类,虽然也是才开始了解,先模门槛把,请叫我门槛战神。说真的系统的学习知识真的是很有必要的,在大学根本没学到过这种东西,教的东西太零零散散,而且自己也不会总结。
个人感觉,在学校学了点框架的知识后,重新重头开始学有种很神奇的感觉,emm,就感觉为什么之前老师这样讲,好像明白了。包括面向对象的思维过程,,什么是单例模式,以及什么是构造方法,什么是继承,什么是封装,什么是多态,什么是实现,什么是抽象,什么是接口,为什么要面对抽象编程,为什么要面向接口编程。就感觉很奇妙

具体内容

(线上):学习了java基础,最终能用java写一个小系统(不详细写了)
(线下)

java中提供的各种类和方法(已学):
String
Format
Exception
Scanner
Math
Timer
File
Date
Calendar
小程序

小型管理系统(代码太多不列出)

定时关机小程序(图形界面)
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;

/**
 * @author Solar
 * @date 2020/6/30 0030 - 13:35
 */

/*
      定时关机小程序
 */
public class Power {

    {
        UI u = new UI();
    }

    private Runtime r = Runtime.getRuntime();

    /**
     * 启动关机计划
     */
    public void start(int time){
        try {
            r.exec("shutdown -s -t "+ time);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 取消关机计划
     */
    public void abort(){
        try {
            r.exec("shutdown -a");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    class UI extends JFrame implements ActionListener{
        //关机按键
        private JButton btnStart;
        //取消按键
        private JButton btnCancel;
        //接收文本框
        private JTextField inputTime;
        private JLabel tips;
        private int overtime;

        public UI(){
            //设置标题
            setTitle("定时开关小程序");
            //设置位置和大小
            setBounds(400,400,400,400);
            //设置当前界面显示的相对位置,设置null时,界面会在屏幕中水平垂直居中
            setLocationRelativeTo(null);
            //设置禁止窗口大小修改
            setResizable(false);
            //设置当前窗口窗体总算在最顶层
            setAlwaysOnTop(true);
            //设置窗口关闭时结束进程
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //初始化组件
            init();

            //设置可见
            setVisible(true);
        }


        private void init(){
        /*    //设置布局(流式布局)
            setLayout(new FlowLayout());*/

            setLayout(null);
            tips = new JLabel("请设置关机的时间");
            tips.setBounds(20,20,240,30);
            inputTime = new JTextField();
            inputTime.setBounds(20,60,340,30);
            btnStart = new JButton("启动任务");
            btnStart.setBounds(50,100,120,40);
            btnCancel = new JButton("取消任务");
            btnCancel.setBounds(220,100,120,40);

            add(tips);
            add(inputTime);
            add(btnStart);
            add(btnCancel);

          /*  //为启动按钮绑定事件
            btnStart.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    System.out.println("Start按钮点击");
                }
            });

            btnCancel.addActionListener((e)->{
                System.out.println("Cancel按钮点击");
            });*/

          btnStart.setActionCommand("start");
          btnCancel.setActionCommand("cancel");

          //为启动按钮绑定事件(this关键字,多态)
          btnStart.addActionListener(this);
          //为取消按钮绑定事件
          btnCancel.addActionListener(this);

        }

        @Override
        public void actionPerformed(ActionEvent e) {

            Timer timer = new Timer();

            String s = e.getActionCommand();
            if(s.equals("start")){
                String time = inputTime.getText();
                try {
                    int t = Integer.parseInt(time);
                    overtime=t;
                        timer.schedule(new TimerTask() {
                        @Override
                        public void run() {
                            tips.setText("电脑将在"+ overtime-- +"秒后关机");
                        }
                    },0,1000);

                } catch (NumberFormatException ex) {
                    tips.setText("请输入正常的关机时间(秒)");
                }
            }

            if(s.equals("cancel")){
                abort();
                timer.cancel();
                tips.setText("计划取消");
            }
        }
    }
}
删除文件:
public class DeleteFile {

    public void deleteAllFile(File dir){
        File[] files = dir.listFiles();
        if(files !=null) {
            for (int i = 0; i < files.length; i++) {
                if (files[i].isDirectory()) {
                    deleteAllFile(files[i]);
                }
                files[i].delete();
            }
        }
    }

    public static void main(String[] args) {
        File file = new File("F:\\2345Downloads");
        new DeleteFile().deleteAllFile(file);
    }
}

模拟红包:
public class RedPacket1 {
    public void moneyPacket(double giveMoney,int sumPeople){
        //设置格式刷
        DecimalFormat fmt = new DecimalFormat("#.##");
        //拿到传的钱
        double money = giveMoney;
        //设置比例数组
        int[] p = new int[sumPeople];
        //设置红包数组
        BigDecimal[] peopleMoney = new BigDecimal[sumPeople];
        //设置分母
        int sumP = 0;
        //分母赋值
        for (int i = 0; i < p.length; i++) {
            p[i] = (int) (Math.random()*100+1);
            sumP += p[i];
        }
        //设置保底机制
        for (int i = 0; i < peopleMoney.length; i++) {
            String pm = "0.01";
            peopleMoney[i]=new BigDecimal(pm);
        }

        //保底后的金额
        money = money - 0.01*sumPeople;

        //设置每个人除保底外的分的金额
        BigDecimal[] b = new BigDecimal[sumPeople];
        for (int i = 0; i < b.length; i++) {
            String proportion = fmt.format((p[i]/(double)sumP)*money);
            b[i] = new BigDecimal(proportion);
        }

        for (int i = 0; i < sumPeople; i++) {
            peopleMoney[i].add(b[i]);
        }
        System.out.println(Arrays.toString(peopleMoney));
    }

    public static void main(String[] args) {
        RedPacket r = new RedPacket();
        r.moneyPacket(0.14,10);
    }
}
使用日期类做日历
public class MyCalendar {

    private int year;
    private int mouth;

    public MyCalendar(int year, int mouth) {
        this.year = year;
        this.mouth = mouth;
    }
    public void ShowCalender(){
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR,year);
        c.set(Calendar.MONTH,mouth-1);
        c.set(Calendar.DAY_OF_MONTH,1);
        //获取月份天数
        int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);
        //获取第一天是星期几
        int nowDOW = c.get(Calendar.DAY_OF_WEEK)-1;

        System.out.println("一\t二\t三\t四\t五\t六\t天");

        for (int i = 0; i < nowDOW-1; i++) {
            System.out.print("\t");
        }
        for (int i = 1; i <= maxDay; i++) {
            if(i<10){
                System.out.print("0"+i+"\t");
            }else {
                System.out.print(i+"\t");
            }
            if((i+nowDOW-1)%7==0){
                System.out.println("");
            }
        }
    }
    public static void main(String[] args) {
        new MyCalendar(2020,7).ShowCalender();
    }
}

结尾

差不多就这些了,因为确实信息量太大不好全部列出来,只能截取一段,而且类的笔记都是实践中学,边学边写笔记太多了就不粘贴了,第一周大概就学了这些,基本老师讲的都会了,进度跟得上。希望接下来几个月保持状态,好好学,找到一份不错的工作把。

共勉!!
(新人报道,不喜勿喷)

你可能感兴趣的:(学习笔记)