程序员成长之路(Day 2)

目录:

​​​​

学习目标:

学习内容:

Java开发环境的搭建:安装JDK,配置环境变量(✔)

Java入门程序(Java的开发流程)(✔)

Java的注释,标识符、标识符的命名规范

关键字列表(依字母排序共51组):

logger(延伸):

LintCode刷题

判断Int型回文

使用匿名内部类

给字符串取整

获取指定日期的毫秒值

超级棒棒糖

多态方式调用绘制图形方法

学习时间:

学习产出:


学习目标:

Java开发介绍

  • Java开发环境的搭建:安装JDK,配置环境变量
  • Java入门程序(Java的开发流程)
  • Java的注释,标识符、标识符的命名规范
  • Java基本数据类型
  • 变量和常量的定义及初始化
  • Java的运算符
  • 运算符的优先级
  • Java分支语句之if…else
  • 循环的嵌套
  • 方法的定义
  • 方法的形参和实参
  • 方法的递归调用

学习内容:

Java开发环境的搭建:安装JDK,配置环境变量(✔)

Java入门程序(Java的开发流程)(✔)

Java的注释,标识符、标识符的命名规范

关键字列表(依字母排序共51组):

        abstract, assert,boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, enum,extends, final, finally, float, for, if, implements, import, instanceof, int, interface, long, native, new,package, private, protected, public, return, short,static, strictfp, super,switch, synchronized,this, throw, throws, transient,try, void, volatile, while

@assert: 是对一个boolean表达式进行检查,一个正确运行的程序必须保证这个 Boolean表达式的值为true,若表达式的值为false,则说明程序已处于一种 不正确的状态下,系统需要提供警告信息并且退出程序。

int main( void )
    {
        FILE *fp;

        fp = fopen( "test.txt", "w" );//以可写的方式打开一个文件,如果不存在就创建一个同名文件
        assert( fp );                           //所以这里不会出错
        fclose( fp );

        fp = fopen( "noexitfile.txt", "r" );//以只读的方式打开一个文件,如果不存在就打开文件失败
        assert( fp );                           //所以这里出错
        fclose( fp );                           //程序永远都执行不到这里来

        return 0;
    }

@const: 修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。(final是用于修饰无法更改的类或方法,无法修饰常量)

异常处理catch、finally、throw、try

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.LinkedHashSet;
// 异常的应用
public class TestException {
    private Logger logger=LoggerFactory.getLogger(getClass());
    public TestException() {}
    boolean testEx() throws Exception{
        boolean ret = true;
        try{
            ret = testEx1();
        }catch (Exception e){
            System.out.println("testEx, catch exception");
            ret = false;
            throw e;
        }finally{
            System.out.println("testEx, finally; return value="+ret);
            return ret;
        }
    }
    boolean testEx1() throws Exception{
        boolean ret = true;
        try{
            ret = testEx2();
            if (!ret){
                return false;
            }
            System.out.println("testEx1, at the end of try");
            return ret;
        }catch (Exception e){
            System.out.println("testEx1, catch exception");
            ret = false;
            throw e;
        }
        finally{
            System.out.println("testEx1, finally; return value="+ret);
            return ret;
        }
    }
    boolean testEx2() throws Exception{
        boolean ret = true;
        try{
            int b=12;
            int c;
            for (int i=2;i>=-2;i--){
                c=b/i;
                System.out.println("i="+i);
            }
            return true;
        }catch (Exception e){
            System.out.println("testEx2, catch exception");
            ret = false;
            throw e;
        }
        finally{
            System.out.println("testEx2, finally; return value="+ret);
            return ret;
        }
    }
    public static void main(String[] args) {
        TestException testException1 = new TestException();
        try{
            testException1.testEx();
        }catch(Exception e){
            e.printStackTrace();
//           在命令行打印异常信息在程序中出错的位置及原因。容易锁死,建议使用logger.error("系统异常",e)
        }
    }
}
  • e.printStackTrace();在命令行打印异常信息在程序中出错的位置及原因。

//不建议使用,容易导致锁死,建议使用logger.error(系统异常,e);-->延伸(logger)

@continue: 跳出本次循环,继续下次循环

@defaultswitch循环中都不是的时候的情况

@implements,@extendsextends继承父类,implements继承接口

@instanceof instanceof是Java的一个保留关键字,左边是对象,右边是类,返回类型是Boolean类型。它的具体作用是测试左边的对象是否是右边类或者该类的子类创建的实例对象

@native:native是与C++联合开发的时候用的!java自己开发不用的!

@strictfp:高精度浮点数,声明范围内都是高精度的。

@super: 调用父类方法。

**@synchronized:线程并发相关(未掌握)

**@transient:序列化(未掌握)

**@volatile:关于并发(未掌握)

logger(延伸):

logger的使用:

引入logger依赖

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.28</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
            <scope>compile</scope>
            <!-- 很重要,上面要写 compile,不要test -->
        </dependency>

导包

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

使用

private Logger logger = LoggerFactory.getLogger(getClass());

private static Logger logger = LoggerFactory.getLogger(JdbcUtil.class);

创建一个logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
    <property name="LOG_PATTERN"
              value="%cyan(%d{yyyy-MM-dd HH:mm:ss}) [%blue(%thread)] %highlight(%-5level) %yellow(%logger{50}) -> %n%msg%n"/>

    <property name="APP_NAME" value="test"/>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="D:/demo/test/log"/>
    <contextName>${APP_NAME}</contextName>

    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/${APP_NAME}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>90</MaxHistory>
            <!--日志文件最大的大小-->
            <MaxFileSize>10MB</MaxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %n%msg%n</pattern>
        </encoder>
    </appender>
    <!-- 输出WARN以上级别到单独的日志文件 -->
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/${APP_NAME}-WARN.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>90</MaxHistory>
            <!--日志文件最大的大小-->
            <MaxFileSize>10MB</MaxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>
    <!--默认输出级别-->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="WARN_FILE"/>
    </root>
    <logger name="druid.sql" level="DEBUG">
        <appender-ref ref="STDOUT"/>
    </logger>
</configuration>

**日志级别由高到底是:fatal,error,warn,info,debug,低级别的会输出高级别的信息,高级别的不会输出低级别的

LintCode刷题

  • 判断Int型回文

1、先转化为字符串,再用字符串的翻转方法:

public boolean judgePalindrome(int number) {
        int length = 0;
        String compare = Integer.toString(number);
        StringBuilder cp = new StringBuilder(compare).reverse();
        if (compare.equals(cp.toString())) {
            return true;
        } else
            return false;
    }

2、直接以int来走:

 // 重载需要不同的参数
    public boolean judgePalindrome1(int number) {
        int compare = 0;
        int temp = number;
        while (number != 0) {
            compare = compare * 10 + number % 10;
            number /= 10;
        }
        return compare == temp;

    }
  • 使用匿名内部类

 return 一个接口,直接在内部重写方法:

return new Animal() {
            @Override
            public void eat(String food) {
                System.out.println(name+" eat "+food);
            }
        };
  • 给字符串取整

判断有没有”.”:(".","+","|","*"都需要加上转译字符:"\\",如果是"\",则需要变成"\\\\")

if (num.contains("."))

用字符串的分离方法来去掉小数点后面的数字,再把字符串转换成为整型:

    String[] split = num.split("\\.");
    return Integer.parseInt(split[0]);
  • 获取指定日期的毫秒值

定义一个输入格式,把按照输入格式输入的转换为日期,最后调用getTime()方法:
 

        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
        Date date=simpleDateFormat.parse(str);
        return date.getTime();
  • 超级棒棒糖

定义一个max最大int数,当v1<v2时,在v1+s[i]>v2时,取max和w[i]的最小值,再把这个w[i]赋值给max,进入循环,选出最小值:

else if (v1+s[i]>v2){
    temp=Math.min(w[i],max);
    max=temp;
}
  • 多态方式调用绘制图形方法

创建不同对象即可:

    figure1=new Figure();
    figure2=new Triangle();
    figure3=new Parallelogram();


学习时间:

2021-8-10 9:00-11:45、1:30-5:30、18:00-19:00


学习产出:

1、刷题*6

2、学习笔记一篇

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值