7.15实习培训日志 java题解
周末总结
本周主要学习了markdown,git,docker等工具的使用。在本周的学习中,初步了解了markdown,git,docker的使用。本周的静态博客部署中,对于怎么显示一个博客内容,有两种,一是把public/下的内容放入nginx,然后配置Nginx配置文件,二是在Dockerfile配置hugo服务器,我刚开始把hugo-linux下到本地,传入github,但是太大了,整个项目有30m,于是在dockerfile中下载hugo,但可能网速有些慢。
cmd alias设置
- 创建文件C:\cmd-alias.bat
 - 注注册表进入HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor,右键新建,字符串值,名为AutoRun,值为C:\cmd-alias.bat,保存退出。
 
java 查看字节码
- cd到java文件目录
 - javac name.java编译
 - javap -v name.class显示java编译器生成的字节码,也可以反编译
 
java格式化代码:Shift Alt L
java assert
public class AssertTest {
  public void methodA(int i) {
    assert i >= 0 : methodB();
    System.out.println(i);
  }
  public void methodB() {
    System.out.println("The value must not be negative");
  }
  public static void main(String args[]) {
    AssertTest test = new AssertTest();
    test.methodA(-10);
  }
}
记得idea开启断言调试
RUN -> Edit Configurations -> Configuration -> VM options : 输入-ea,点击确定。
编译通不过,methodB()不能是一个void函数,必须有返回值,如int,String等。或者methodB()可以换成有返回值的东西,如i=1,i++等。
assert用法
assert <boolean表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出AssertionError,并终止执行。assert <boolean表达式> : <错误信息表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出java.lang.AssertionError,并输入<错误信息表达式>。
静态变量
public class Static {
    static {
        int x = 5;
    }
    static int x,y;
    public static void main(String args[]) {
        x--;
        myMethod();
        System.out.println(x + y + ++x);
    }
    public static void myMethod() {
        y = x++ + ++x;
    }
}
首先,需要明白类的加载顺序:
- 父类静态对象和静态代码块(并且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关.)静态变量最好定义在静态代码块的前面
 - 子类静态对象和静态代码块
 - 父类非静态对象和非静态代码块
 - 父类构造函数
 - 子类非静态对象和非静态代码块
 - 子类构造函数
 
接下来是变量的作用范围(作用域(scope))
在C、C++和Java中,作用去由花括号的位置决定
public static void main(String args[]) {
    int x = 100;
    {
        int x = 30;
    }
    System.out.println(x);
}
报错重复定义
public static void main(String args[]) {
    {
        int x = 30;
    }
    int x = 100;
    System.out.println(x);
}
代码块中的局部变量已经销毁,能定义
生存周期与作用域的区别:
生存周期: 变量从定义到销毁的时间范围。
作用域: 变量的可见代码域(块作用域,函数作用域,类作用域,程序全局作用域)。
静态变量,全局或局部声明的static变量都存放于程序的全局变量区域,,静态变量的生命周期都是整个源程序。它的作用域决定于它被定义的位置。所以静态变量的作用域<=生存周期。
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
class文件:java字节码文件
static int x;
static {
    x = 5;
}
x结果为5
static {
    x = 5;
}
static int x;
x结果为5
static {
    x = 5;
}
static int x = 1;
x结果为1
static int x = 1;
static {
    x = 5;
}
x结果为5
static int x = 1;
static {
    int x = 5;
}
x结果为1(static块为局部变量)
static {
    int x = 5;
}
static int x = 1;
x结果为1(static块为局部变量)
static String s;
public static void main(String args[]) {
    //String s = "";  1
    if (s instanceof String) {
        System.out.println("I am true String");
    } else {
        System.out.println("I am false String");
    }
}
运行结果为 "I am false String"如果改成1处则为true
instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例
三元运算符自动转换
public static void main(String[] args) {
  int a = 5;
  System.out.println("value is "+((a<5) ? 10.9 : 9));
}
输出9.0,根据运算符的精确度类型进行自动类型转换
char x='x';
int i =10;
System.out.println(false ? i : x);
System.out.println(false ? 10 : x);
输出120,x.
java规范中提到,当后两个表达式有一个是常量表达式(10),另外一个类型是T(char)时,而常量表达式可以被T表示时,输出结果是T类型。
Boolean b = new Boolean("dfas"); #能编译,返回false
int c = 0x1234; #能编译通过
线程问题
class MyThread extends Thread {
    public void run() {
        System.out.println("MyThread: run()");
    }
    public void start() {
        //super.start();
        System.out.println("MyThread: start()");
    }
}
class MyRunnable implements Runnable {
    public void run() {
        System.out.println("MyRunnable: run()");
    }
    public void start() {
        System.out.println("MyRunnable: start()");
    }
}
public class MyTest {
    public static void main(String args[]) {
        MyThread myThread = new MyThread();
        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable);
        myThread.start();
        thread.start();
    }
}
A. Prints : MyThread: start() followed by MyRunnable:run()
B. Prints : MyThread: run() followed by MyRunnable:start()
C. Prints : MyThread: start() followed by MyRunnable:start()
D. Prints : MyThread: run() followed by MyRunnable:run()
打印
MyThread: start()
MyRunnable: run()
在MyThread中start方法加上super.start();
打印
MyThread: start()
MyThread: run()
MyRunnable: run()
A正确,MyThread重写了start方法,实际上只是一个普通方法调用,thread.start()不会调用MyRunnable中的start方法.
抛出异常格式
static void throwMethod() throws IllegalAccessException {
  System.out.println("Inside throwMethod.");
  throw new IllegalAccessException("demo");
}
public static void main(String args[]) {
  try {
      throwMethod();
  } catch (IllegalAccessException e) {
      System.out.println("Caught " + e);
  }
}
注意throwMethod() throws IllegalAccessException
父类子类方法执行
class Base {
    int i = 99;
    public void amethod() {
        System.out.println("Base.amethod()");
    }
    Base() {
        amethod();
    }
}
public class Derived extends Base {
    int i = -1;
    public static void main(String argv[]) {
        Base b = new Derived();
        System.out.println(b.i);
        b.amethod();
    }
    public void amethod() {
        System.out.println("Derived.amethod()");
    }
}
**初始化:先成员变量再构造方法,先父类再子类
多态表现:有同名方法执行子类的**
class Parent {
    private void method1() {
        System.out.println("Parent's method1()");
    }
    public void method2() {
        System.out.println("Parent's method2()");
        method1();
    }
}
class Child extends Parent {
    public void method1() {
        System.out.println("Child's method1()");
    }
    public static void main(String args[]) {
        Parent p = new Child();
        p.method2();
    }
}
注意Parent的method1是私有的,所以会调用父类方法
Parent's method2()
Parent's method1()
String str = "Java";
  StringBuffer buffer = new StringBuffer(str);
  if(str.equals(buffer)) {
    System.out.println("Both are equal");
  } else {
    System.out.println("Both are not equal");
}
返回false,都不是同一个对象,可以看一下equals的源码
public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            ...
        }
        return false;
    }
												
											7.15实习培训日志 java题解的更多相关文章
- 7.19实习培训日志- java进阶
		
java进阶 java集合 Collection List ArrayList jdk1.2,异步处理,性能高,线程不安全 Vector jdk1.0,同步处理,性能低,线程安全 Set HashSe ...
 - 7.20实习培训日志-Java基础程序设计结构
		
Java基础程序设计结构 在 Math 类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程,如果得到一个完全可预测的结果比运行速度更重要的话,那么就应该使用StrictMath类,它使用 ...
 - 7.17实习培训日志-java基础
		
总结 今天主要是学习了java基础,java面向对象方面的知识,然后下午老师讲了软件的设计模式,今天看了一部分,印象深刻的是单例模式,用枚举实现单例模式.晚上主要讲了maven的一些基础知识和idea ...
 - 7.24实习培训日志-Docker-Compose
		
Docker-Compose 对于昨天的考试,需要 项目根目录下需要docker/mysql/Dockerfile 文件用于构建mysql镜像 项目根目录下需要docker/java/Dockerfi ...
 - 7.30实习培训日志-SQL优化
		
总结 今天早上考试,下午主要是老师引导我们学习SQL优化,晚上主要是同学的技术分享,杨松柏同学主要给我们分享了java的io的一些东西,c10k问题,bio(同步阻塞IO),NIO(同步非阻塞IO), ...
 - 7.10实习培训日志-Maven 敏捷编程
		
总结 今天早上主要学习了Maven和Idea的Docker插件,遇到了一些坑,对于Idea的Docker插件,不能下载,然后我去访问Idea插件官网,发现被墙了,只要开个VPN就好.下午主要是张总经理 ...
 - 7.31实习培训日志-docker sql
		
docker mysql docker问题 今天问了老师有关docker的问题,entrypoint和cmd的区别,两者同时存在cmd的执行结果会被当做参数传入entrypoint. dockerfi ...
 - 7.27实习培训日志-Oracle SQL(三)
		
Oracle SQL(三) 视图 特性 简单视图 复杂视图 关联的表数量 1个 1个或多个 查询中包含函数 否 是 查询中包含分组数据 否 是 允许对视图进行DML操作 是 否 CREATE [OR ...
 - 7.25实习培训日志-Oracle SQL(一)
		
Oracle SQL(一) 重点 尽量避免select *,影响性能,不直观. 慎用Distinct,会排序,影响性能,用exists 排序尽量利用索引,索引有序 索引列不要加函数,会使索引失效 外连 ...
 
随机推荐
- The connection between feature spaces and smoothness is not obvious, and is one of the things we’ll discuss in the course.
			
http://www.gatsby.ucl.ac.uk/~gretton/coursefiles/lecture4_introToRKHS.pdf
 - [持续集成]Jenkins 自动化部署 Maven 工程
			
一.Jenkins 持续部署原理图 基础服务: 1 SVN 服务 SVN是Subversion的简称,是一个开放源代码的版本控制系统.说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的 ...
 - php 整合 微博登录
			
现在很多网站都整合了便捷的第三方登录,如QQ登录.新浪微博.搜狐.网易等,为用户提供不少方便和节约时间.我们可以选择使用JS或SDK实现第三方提供用户授权API,本文主要讲解 JAVA SDK 新浪微 ...
 - Java反射详解(转)
			
原文地址:http://www.importnew.com/17616.html 动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化.比如众所 ...
 - springmvc fastjson 反序列化时间格式化
			
第一种情况是从后台拿到数据,进行反序列化,反序列化格式时间:试了一下很多网上的方法,最后发现还是在实体类上面的日期字段加上如下注解,可以完成格式化操作,否则默认就都是时间戳的格式: @JSONFiel ...
 - 开始使用Python
			
1. 开始使用Python 1.1 print使用str()函数显示对象,而交互式解释器调用repr()函数来显示对象. 1.2 在解释器中_表示最后一个表达式的值. 1.3 >>用来重定 ...
 - freemaker开发
			
推荐书籍 百度云盘 密码: c3m9 1. 前言 本书为<FreeMarker 2.3.19 中文版手册>,包含了freemarker开发得方方面面,可以作为开发freemarker的字典 ...
 - Centos 6.3 编译安装Nginx+php+Mysql
			
1.配置防火墙,开启80端口.3306端口 vi /etc/sysconfig/iptables 将 -A INPUT -m state --state NEW -m tcp -p tcp --dpo ...
 - 维特比算法(Viterbi)
			
维特比算法(Viterbi) 维特比算法 编辑 维特比算法是一种动态规划算法用于寻找最有可能产生观测事件序列的-维特比路径-隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔可夫模型中.术语“维特比路 ...
 - 在node.js中建立你的第一个HTTp服务器
			
这一章节我们将从初学者的角度介绍如何建立一个简单的node.js HTTP 服务器 创建myFirstHTTPServer.js //Lets require/import the HTTP modu ...