zoukankan      html  css  js  c++  java
  • 我的java学习笔记

    java学习笔记

    课前预备

    • 要注意代码能力

    • 面向对象分析能力

    • 内存底层和源码分析习惯

    • 调试和查错能力

    javaSE: java standard edition即是java的基础

    面向对象进阶是难点,不要慌

    表格思想:普通表,多表关联,查询表

    类与对象:表结构(表头)对应类,一行数据对应对象。用C语言对比,类就是结构体,对象就是一个结构体变量

    如何准备简历、面试

    绝对不能抄,态度很重要。

    基本信息,专业技能,求职意向(想当什么投什么),详细的工作履历项目经验(要出彩),曾获奖励,自我评价

    奖学金也是奖励啊,注意去拿。

    接到面试电话,要查询对方公司信息以及业务,做面试准备(公司行业是否有前景,公司历史和结构,公司产品和项目)

    投简历时看招聘信息,看什么条件优先

    研究该公司产品:用户群体,pc与app端功能比较,对比同类产品

    面试官喜欢什么样的人

    • 秉性良好,谈吐正常(表现
      • 精心自我介绍,突出实践经验
      • 看起来成熟,大方,无小动作
      • 干净整洁
      • 不说任何人坏话,会把事情搞砸
    • 工作态度端正,工作认真的人
      • 是否以公司事务为重
      • 加班,看你的技术地位,需要就该加
      • 大大方方谈薪水,要觉得自己值这个钱
    • 热爱职业,有职业规划
      • 工作快乐
      • 至少规划三年合理的职业规划,不放大不缩小
    • 热爱学习,喜欢提升自己
      • 利用业余时间参加职业培训
      • 最近对新技术感兴趣,与面试官感兴趣

    技术面试不该问

    1. 工资,五险一金
    2. 加班
    3. 面试结果,别问能不能上

    必须问的一个:面试官问:您还有问题吗?

    问产品问题,技术问题,贵司的解决方案如何

    软实力

    硬实力是技术能力,长期慢慢提高

    软实力是沟通、管理能力

    是职场晋升的关键,要注意训练,短时间可以提高

    1. 基础实力(形象气质,声音魅力)决定人生基础
    2. 人际沟通(沟通力,说服力)决定能否到中层
    3. 领导能力(情商,影响力,逆境能力)决定能否晋升高层

    训练声音魅力

    Java背景

    1995年研发出来,核心优势:跨平台

    14年推出JavaSE8.0,这是大部分企业用的版本

    JavaSE:标准版,定位在pc上应用

    JavaEE:企业版,定位服务端应用

    Java的优点:简单性、高性能、分布式、多线程、健壮性

    Java的运行机制

    Java是解释型和编译型语言的结合,编译器把*.java编译为字节码文件.class然后用java虚拟机来解释

    JVM(Java Virtual Machine)就是虚拟机,不同系统有不同虚拟机,来实现跨平台

    JRE(Java Runtime Environment)包含:java虚拟机、库函数、运行java程序必须文件

    JDK(Java Development Kit)包含JRE,多了编译器,调试器

    第一个java程序

    JDK的安装

    下载jdk安装

    配置path环境变量

    • 新建系统变量:JAVA_HOME:C:Program FilesJavajdk-16.0.2

    • 在Path添加JAVA_HOMEin

    • calsspath问题:如果jdk1.5以上就不用管

    cmd用java -version看安装版本

    Hello World

    • java必须有一个源文件包含public static void main(String args[])方法。这个类成为应用程序的主类

    编译:生成一个*.class文件

    javac 文件名.java
    

    运行:

    java 文件名
    
    //Hello.java
    public class Hello {
    	public static void main(String args[]) {
    		System.out.println("Hello world!");
    	}
    }
    

    分析:

    • 一个源文件至多声明一个public类,其他的类不限个数

    • public class 文件名 {}:类名称与文件名保持一致

    • 编译一个.java时,有多少class就会编译出多少字节码文件

    • 主方法定义:

    public static void main(String args[]){
    	//从这里开始执行
    }
    

    主方法所在的类叫为“主类”,都将采用public class来定义

    • 系统输出

      System.out.println("");//输出后换行
      System.out.print("");//输出后不换行
      

    java使用小规范

    • 命名规范
      • 包的命名:全部小写(com.blue)
      • 类的命名:每一个单词首字母大写(HelloWorld)
      • 方法和变量的命名——驼峰原则:首字母小写,后面单词首字母大写(getName)(get)
      • 常量的命名:全部大写,常加入下划线(MAX_VALUE)

    补充一个文档注释

    /**开头,以*/结尾,包含一些JavaDoc标签

    /**
    *@author 我
    *@version 1.01
    */
    

    java采用Unicode字符集,汉字和英文字母一样都是普通字符甚至可以中文变量名

    基础语法

    变量&常量

    • 局部变量:声明在方法内

      • 没有默认值,要手动初始化
    • 实例变量:声明在类里面

    • 类变量(静态变量):当常量用

      • 用static关键字声明,也在类里面

      • 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为 public 类型。

      • 默认值和实例变量相似。数值型变量默认值是 0,布尔型默认值是 false,引用类型默认值是 null。

        public static double pi = 3.14;
        
    • 常量:只能初始化一次

      final double PI = 3.14;
      

    内置数据类型

    Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

    byte:

    • 最小值是 -128(-2^7);最大值是 127(2^7-1)
    • 默认值是 0
    • 只有 int 类型的四分之一;

    short:

    • 最小值是 -32768(-2^15);最大值是 32767(2^15 - 1)
    • 是int型变量所占空间的二分之一;
    • 默认值是 0

    int:

    • 最小值是 -2,147,483,648(-2^31);最大值是 2,147,483,647(2^31 - 1)
    • 一般地整型变量默认为 int 类型;
    • 默认值是 0

    long:

    • 最小值是 -9,223,372,036,854,775,808(-2^63);最大值是 9,223,372,036,854,775,807(2^63 -1)
    • 这种类型主要使用在需要比较大整数的系统上;
    • 默认值是 0L
    • 例子:long a = 100000L,Long b = -200000L;
      "L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。

    float:

    • float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;-3.403E38~3.403E38
    • float 在储存大型浮点数组的时候可节省内存空间;
    • 默认值是 0.0f
    • 例子:float f1 = 234.5f。

    double:

    • double 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数;-1.798E308~1.798E308

    • 浮点数的默认类型为 double 类型;

    • double类型同样不能表示精确的值,如货币;

    • 默认值是 0.0d

    • 例子:

      double   d1  = 7D ;double   d2  = 7.; double   d3  =  8.0; double   d4  =  8.D; double   d5  =  12.9867; 
      

      7 是一个 int 字面量,而 7D,7. 和 8.0 是 double 字面量。

    boolean:布尔型

    • 只有两个取值:true 和 false;
    • 默认值是 false

    char:

    • char 类型是一个单一的 16 位 Unicode 字符;
    • 最小值是 u0000(十进制等效值为 0);最大值是 uffff(即为 65535);
    • char 数据类型可以储存任何字符;

    有关整型的表示方法

    byte、int、long、和short都可以用十进制、16进制以及8进制的方式来表示。当使用字面量的时候,前缀 0 表示 8 进制,而前缀 0x 代表 16 进制, 例如:

    int ba = 05;int shiliu = 0x15;int bina = 0B101011;//43long loong = 10180000000L;
    

    语法小tips

    补充一下我不知道的就是了

    • String类可以直接用+号连接,如果是char就没法加成字符串,不过可以有个强制类型转换的思路:
    char c1 = 'a',c2 = 'b';System.out.println(""+c1+c2);
    

    不仅如此甚至可以连接数字

    int num = 666;System.out.println("num = " + num);
    
    • System.out.println()里面不传参就是打印回车啊

    • Java的String不是 char [],而是char *。如果使用 ==来做比较,其实是比较两个指针的值

      所以我们一般使用if(a.equals(b))来比较是否相等

    • 实参形参:小小复习一下,形式参数是函数传进来用的变量名称,实际参数是调用时传入的值

    • 重载(overload):写C++的时候遇到过,就是换个形式参数定义的同名函数,就是同名的不同函数

    • 在java中计算运行时间:使用System.currentTimeMillis()来返回一个当前时间,用前后两个量相减就可以得到运行时间,单位毫秒

    简单的键盘输入

    使用Scanner类获得键盘输入

    import java.util.Scanner;public class demo{    public static void main(String args[]){        Scanner s = new Scanner(System.in);                System.out.println("输入一行:");        String s1 = s.nextLine();//使用nextLine方法读到一行        System.out.println("读到了"+s1);                System.out.println("输入月薪(单位:k)");        int s2 = s.nextInt();        System.out.println("年薪为:" + s2 * 12 + 'k');            }}
    

    使用s.next()读一个单词,s.nextLine()读一行,s.nextInt()读一个数字。

    使用s.hasNextXxx()来判断是否还有输入

    System.out.println("接下来请输入数字");if(s.hasNextInt()) {    System.out.println("诶,对");} else {    System.out.println("啥卵,不识字吗");}
    

    千万别忘了在使用前导入类:import java.util.Scanner;

    nextInt()后使用nextLine()跳过的解决办法

    输入数字后,我们按下回车键,这时候nextInt()把缓冲区的数字读走了,留下了换行符,用nextLine()的时候把换行符读走了,所以形成了跳过的错觉。如果还要往下读入,应该先使用一个nextLine()把换行符读掉

    第一个Java项目

    • 通过idea创建一个项目,在project structure里选择你的JDK

    桌球游戏小项目

    需要import两个东西

    import  java.awt.*;import javax.swing.*;
    

    在主类的命名后面加上extends JFrame,这样可以直接使用setSize()等方法

    package com.ty01;import java.awt.*;import javax.swing.*;public class BallGame extends JFrame{    Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");    Image table = Toolkit.getDefaultToolkit().getImage("images/table.jpg");	//当然这里你需要现在项目根目录下创建images文件夹,然后导入这两个图片文件    double x = 200;//设置位置    double y = 200;    int spd = 15;//速度    double degree = 3.14 / 3;//弧度制的60度    //绘制窗口    public void paint(Graphics g){        System.out.println("画了一次窗口");        g.drawImage(table,0,0,null);        g.drawImage(ball,(int)x,(int)y,null);        x += spd * Math.cos(degree);//初中数学        y += spd * Math.sin(degree);        //判断上下边界,500是窗口高度;40是桌子边框,30是球直径;最后一个40是标题栏的高度        if(y > 500-40-30 || y < 40+30) degree = -degree;//关于x轴对称就是相反数        //判断左右边界        if(x > 856-30-40 || x < 40) degree = 3.14 - degree;//关于y轴对称就是补角    }    //创建窗口    void launchFrame(){        setSize(856, 501);        setLocation(100,100);        setVisible(true);        //实现动画,每秒绘制窗口25次        while(true){            repaint();            try {                Thread.sleep(25);//1000ms / 25 = 40ms            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }    public static void main(String[] args){        System.out.println("我的小游戏开始了!");        BallGame game = new BallGame();        game.launchFrame();    }}
    

    10步天才思维

    • 学习目的
    • 是什么用在哪里
    • 如何使用
    • 深度思维:模拟设计者思维过程
    • 广度思维:类比其他概念
    • 广度思维:练习已知,底层原理分析
    • 广度思维:类比生活中的例子
    • 可视化辅助和分析
    • 不足
    • 创新改进,新组合

    面向对象

    以一个表格为例,表头是类,表中一行数据是对象,所有对象都有的动作就是方法。

    C/C++中类和结构体的区别:(以前的疑惑)

    • 结构体使用存储(Stack Allocation),而类使用堆存储(Heap Allocation)(栈的空间相对较.但是存储在栈中的数据访问效率相对较高
    • Struct变量使用完之后就自动解除内存分配,Class实例有垃圾回收机制来保证内存的回收处理。
    • 轻量对象,结构的成本较低。 在表现抽象和多级别的对象层次时,类是最好的选择。

    面向过程和面向对象的区别:

    • 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了
    • 面向对象就是把问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
    • 如果是面向对象的设计思想来解决问题。整个五子棋可以分为1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

    对象是类的实例

    一个类有:属性(成员变量),方法,构造方法(构造方法和类名一样,没有返回值,可以省略)

    创建一个类:

    class testclass{        int id, num;//属性        public void amethod() {            System.out.println("this is a test class");//方法        }        testclass(){}//构造方法}
    

    如果写在public class 主方法里,注意一个静态方法不能调用动态方法,所以要加static

    定义小的类 一般写在最外面

    一个类中,不同对象的属性用的不同内存,但方法是用的同一段内存

    构造方法(构造器)

    • 通过new关键字调用

    • 方法名和类名一致

    • 返回值是本类,不能自定义返回值

    • 不写的话,编译器自动定义一个无参的构造方法

  • 相关阅读:
    Map之类的东西
    [待码][BZOJ1858]SCOI2010序列操作 jzyzoj1655
    Linux 系统时间和硬件时间
    自动化运维之puppet的学习(如何找到你需要的模块)
    linux 搭建hexo博客
    坚持不懈之linux haproxy的配置文件关键字查询手册
    坚持不懈之linux haproxy 配置文件 详情
    Linux Haproxy 安装和部署
    linux 破解版confluence安装
    zookeeper 简介
  • 原文地址:https://www.cnblogs.com/tythen/p/15194346.html
Copyright © 2011-2022 走看看