Java学习笔记Day01 Java概述

第一章 Java概述

1.1.1 Java起源以及发展历程

Java语言出现在1995年

Java之父:James Gosling

官方网站:java.sun.com

1.1.2 Java语言简介

  • 一种面向对象的编程语言(OOP)
  • 它的语法结构与C和C++语言极为相似
  • 所用的语法十分简单是C+ + - -
    • 无直接指针操作
    • 自动内存管理
    • 数据类型长度固定
    • 不用头文件
    • 不包含结构和联合
    • 不支持宏
    • 不用多重继承
    • 无类外全局变量
    • 无GOTO
  • 可以实现很多开发
    • 面向对象的应用开发
    • 各类网络应用程序的开发
    • 计算过程的可视化
    • 动态画面/交互操作
    • Internet的系统管理
    • 数据库操作
    • And more ……

1.2.1 Java语言优势

  • 资源免费
  • 跨平台
  • 健壮、安全
  • 高性能
  • 简单
  • 面向对象
  • 动态性
  • 多线程

1.2.2 Java应用平台

  • Java SE 标准版
  • Java EE 企业版
  • Java ME 微型版

1.2.3 专有名词

  • JDK:Java开发工具包

    JDK=JRE+Tools

  • JRE:Java运行环境

    JRE = JVM + API(Lib )

  • JVM:Java虚拟机

  • SDK:开发工具包

JVM、JRE、JDK关系

JVM、JRE、JDK关系

1.2.4 Java跨平台原理

  • JVM附着在句题的操作系统之上,将字节码转换为特定机器上的机器码,然后在特定的机器上运行。

JVM跨平台原理

一次编译随处运行流程
  • Java字节码的跨平台使Java程序具有一次编译随处运行的特性,流程如下:

Java字节码的跨平台

Java字节码执行方式
  • 解释执行方式
  • 即时编译方式(JIT)

1.2.5 垃圾回收机制

  • 垃圾回收就是清理不再使用的对象时方可内存空间,Java程序的内存分配和回收都是由JRE在后台自动进行的。
  • 垃圾回收的特点
    • 内存优化
    • 动态回收
    • 回收的不确定性
    • 占用系统开销

1.3.1 JDK安装配置

  • 步骤一:下载JDK

  • 步骤二:安装JDK

  • 步骤三:配置环境变量

    需要配置的环境变量:

    JAVA_HOME=JDK安装文件位置
    PATH=%JAVA_HOME%\bin
    CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
    

1.3.2 JDK目录

  • bin:JDK包中命令及工具所在目录
  • jre:运行环境目录
  • lib:类库所在目录
  • db:附带数据库目录
  • include:包含本地代码的C头文件的目标
  • src.zip:源代码压缩文件

1.3.3 JDK常用工具

  • javac:Java语言编译器
  • java:Java字节码解释器
  • javadoc:文档生成器
  • javap:Java字节码分解程序
  • javah:Jni编程工具
  • appletviewer:小应用程序浏览工具
  • jar:打包程序

1.4.1 对象(object)——一个可标识的存储区域

Person p = new Person()

1.4.2 类(class)——具有共同属性和行为的对象集合

class Person{
    int age;
    String name;
    void sayHello() {}
}

类和对象的关系

  • 类是对象的抽象模板
  • 对象是类的实例

1.4.3 面向对象的三大特征

  • 封装性
  • 继承性
  • 多态性

1.4.4 封装

  • 模块化:将属性和行为封装在类中,程序定义很多类
  • 信息隐蔽:将类的细节部分隐藏起来,用户只通过受保护的接口访问某个类
class Person{
    private int age;
    private int getAge(){return age;}
    public void setAge(int a){age = a}
    String name;
    void sayHello(){}
}

1.4.5继承

继承性:父类和子类之间共享数据合方法

继承的好处

  • 更好地进行抽象和分类
  • 增加代码的重用率
  • 增加可维护性
//父类
class Person{
    int age;
    String name;
    void sayHello(){}
}

//子类
class Student extends Person{
    String school;
    double score;
    void meetTeacher(){}
}

1.4.6 多态

多态

  • 不同的对象收到同一个消息(调用方法)可产生完全不同的效果
  • 实现的细节由接收对象自行决定

1.4.7 面向对象设计思想的要点

  • 认为客观世界由各种对象组成
  • 程序的分析和设计都围绕着
    • 有哪些对象类
    • 每个类有哪些属性、哪些方法
    • 类之间的关系(继承、关联等)
    • 对象之间发出消息(调用方法)

1.5 第一个Java程序

1.5.1 Java程序的类型

Application程序
public class HelloWorldApp{
    public static void main(String args[]){
        System.out.println("Hello World");       
    }
}
  • class是主体
  • public类名与文件同名
  • main()的写法是固定的
Applet程序
import java.awt.*;
import java.applet.*;
import javax.swing.*;
public class HelloWorldApplet extends JApplet {
    public void paint(Graphics g){
        g.drawString("Hello World",20,20);
    }
}
  • import表示导入
  • extends JApplet表示继承
  • 由paint()方法,表示如何绘制
  • 没有main()方法
Java程序的基本构成
  • package语句(0或1句)
  • import语句(0或多句)
  • 类定义——class(1或多个)
    • 一个文件智能有一个public类
  • 类=类头+类体
  • 类成员=字段(filed,属性,变量)+方法(method,函数)
  • 方法=方法头+方法体

1.5.2 开发Java程序的基本步骤——编辑、编译与运行

  • 源程序编辑
  • 程序编译(javac)
  • 程序运行(java工具——JDK)
  • JDK安装后文件夹介绍
    • bin:工具文件
    • jre:运行环境
    • demo:示例文件
    • include:与C相关的头文件
    • lib:程序库
    • db:数据库相关
Application的编辑、编译与运行
  • 程序编辑:编辑器——文件名要与public class的类名一致

    • 区分大小写
  • 程序编译——转换为字节码文件,拓展名.class

    javac hello.java
    
    javac -d classes x1.java x2.java
    
  • 程序的运行——执行.class文件中的指令的过程

    java hello
    
    java -cp classes package
    

path和classpath的区别:

path是命令(javac,java)的路径,classpath是所要引用的类的路径

Applet的编辑、编译与运行

Java Applet程序必须嵌入到 HTML中,并由负责解释HTML 文件的 WWW 浏览器充当解释器,解释执行程序。

  • 源程序的编辑和编译

  • 在HTML文件里嵌入Applet

    • 使用标签:

      <applet code = "HelloWorldApplet.class"> width=200 height=40 background=white>
      

1.6.1 输入输出

文本界面
  • Scanner类
    • java.util.Scanner包
  • in&out
    • java.io包
方法特点
System.out.println()再打印后加上回车换行
System.out.print()连续打印
  • 示例

    public class PrintSample {
        public static void main(String[] args) {
            String s = "Hello";
            char c = 'c';
            System.out.println("String is:" + s);
            System.out.println("char is:" + c);
        }
    }
    
图形界面
  • 使用文本框对象(TextField)获取用户输入的数据
  • 使用标签对象(Label)或文本框对象输出数据
  • 使用命令按钮(Button)来执行命令

示例

  • add(xxxx)加入对象
  • btn.addActonListener处理事件
  • actionPerformed()具体处理事件
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class  AppletInOut extends java.applet.Applet
{
	TextField in = new TextField(10);
	Button btn = new Button("求平方根");
	Label out = new Label("用于显示结果的标签");

	public void init()
	{
		setLayout( new FlowLayout() );
		add( in );
		add( btn );
		add( out );
		/*btn.addActionListener( new BtnActionAdapter() );
	}

	class BtnActionAdapter implements ActionListener
	{
		public void actionPerformed( ActionEvent e )
		{
			String s = in.getText();
			double d = Double.parseDouble( s );
			double sq = Math.sqrt(d);
			out.setText( d + "的平方根是:" + sq );
		}*/
        //Java8可以简写为e->{…}
		btn.addActionListener( e->{
			String s = in.getText();
			double d = Double.parseDouble( s );
			double sq = Math.sqrt(d);
			out.setText( d + "的平方根是:" + sq );
		});
	}
}

1.6.2 注释

  • 单行注释

    • 语法:

      //单行注释
      
  • 多行注释:

    • 语法:

      /*多行注释*/
      
  • 文档注释

    • 语法:

      /**文档注释*/
      
生成Java API文档
  • 编写文档注释后,可以通过使用“javadoc”提取文档注释生成Java API文档。javadoc命令基本语法格式如下:

     javadoc 选项 java源文件/清单文件
    
常用的javadoc标记
标记作用
@auther指定程序的作者。用于类或者接口的注释。
@version指定源文件的版本。用于类或接口前注释
@deprecated不推荐使用的方法。用于方法的注释
@param方法的参数的说明信息。用于方法的注释
@return方法的返回值的说明。用于方法的注释
@see“参见”,用于指定交叉参考的内容
@exception抛出异常的类型。用于方法的注释。
@throws抛出的异常,和exception同义

1.7 IDE集成开发环境

  • Eclipse,NetBeans
  • IntelliJ IDEA

1.8 练习

案例分析

  • 编写一个应用程序,验证以下等式是成立的:

3 3 + 4 3 + 5 3 = 6 3 6 3 + 7 3 + … + 6 9 3 = 18 0 3 3^3+4^3+5^3=6^3\\ 6^3+7^3+…+69^3=180^3 33+43+53=6363+73++693=1803

  • 找到更多的这样的整数:一些相续正整数的立方和正好等于另一个整数的立方。

小分析:第一问要问的是:给定一个区域[a,b]以及给定的一个数c要证明: a 3 + ( a + 1 ) 3 + ( a + 2 ) 3 + … + b 3 = c 3 a^3+(a+1)^3+(a+2)^3+…+b^3=c^3 a3+(a+1)3+(a+2)3++b3=c3

第二问则是给定一个区域[a,b],要求出整数c满足: a 3 + ( a + 1 ) 3 + ( a + 2 ) 3 + … + b 3 = c 3 a^3+(a+1)^3+(a+2)^3+…+b^3=c^3 a3+(a+1)3+(a+2)3++b3=c3

案例实现

  • 将变量封装在MathTest类中

    封装示例:JavaBean

    public class ClassName {
        //成员变量
        //构造方法
        //无参构造方法
        //*有参构造方法
        //成员方法
        //getxxx()
        //setxxx()
    }
    
    //MathTest.java
    public class MathTest {
        private int number;
        private int sum;
    
        /*public MathTest(){}
    
        public MathTest(int number,int sum) {
            this.number = number;
            this.sum = sum;
        }*/
    
        public void setNumber(int number) {
            this.number = number;
        }
    
        /*public int getNumber(){
            return number;
        }*/
    
        public void setSum() {
            sum = (int) (sum + Math.pow(number,3));
            //return sum;
        }
    
        public int getSum() {
            return sum;
        }
    }
    
  • 第一问:证明 a 3 + ( a + 1 ) 3 + ( a + 2 ) 3 + … + b 3 = c 3 a^3+(a+1)^3+(a+2)^3+…+b^3=c^3 a3+(a+1)3+(a+2)3++b3=c3

    import java.util.Scanner;
    
    public class Result {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("第一问:");
            //输入区间下限a
            System.out.print("区间下限a:");
            int a =scanner.nextInt();
            //输入区间上限b
            System.out.print("区间上限b");
            int b =scanner.nextInt();
            //输入需要验证的结果c
            System.out.print("需要验证的结果c:");
            int n =scanner.nextInt();
            //调用MathTest类
            MathTest test = new MathTest();
            for(int i = a;i < b;i ++) {
                test.setNumber(i);
                test.setSum();
            }
            
            for(int i = a;i <= b;i++) {
                test.setNumber(i);
                test.setSum();
            }
    
            if (test.getSum() == n*n*n) {
                System.out.println("success");
            }
            else {
                System.out.println("fail");
            }
        }
    }
    
  • 第二问:在给定区域[a,b]上下限a,b的条件下,寻找满足 a 3 + ( a + 1 ) 3 + ( a + 2 ) 3 + … + b 3 = c 3 a^3+(a+1)^3+(a+2)^3+…+b^3=c^3 a3+(a+1)3+(a+2)3++b3=c3的整数c。

    由已知公式可知
    1 3 + 2 3 + … + n 3 = [ [ n ( n + 1 ) ] 2 ] 2 1^3+2^3+…+n^3=[\frac{[n(n+1)]}{2}]^2 13+23++n3=[2[n(n+1)]]2
    变形可得:
    x 3 + ( x + 1 ) 3 + … + y 3 = ( 1 3 + 2 3 + … + y 3 ) − ( 1 3 + 2 3 + … + ( x − 1 ) 3 ) = ( y ( y + 1 ) 2 ) 2 − ( x ( x − 1 ) 2 ) 2 x^3+(x+1)^3+…+y^3\\=(1^3+2^3+…+y^3)-(1^3+2^3+…+(x-1)^3)\\=(\frac{y(y+1)}{2})^2-(\frac{x(x-1)}{2})^2 x3+(x+1)3++y3=(13+23++y3)(13+23++(x1)3)=(2y(y+1))2(2x(x1))2

  • import java.util.Scanner;
    import java.math.BigDecimal;
    
    public class Result2 {
        public static void main(String[] args) {
            long millis = System.currentTimeMillis();
            Scanner scanner = new Scanner(System.in);
            System.out.println("Q2:");
            //输入区间下限a
            System.out.print("first number:");
            int a = scanner.nextInt();
            //输入区间上限b
            System.out.print("last number:");
            int b = scanner.nextInt();
            double m;
            m = (b * (b + 1)) * (b * (b + 1)) - (a * (a - 1)) * (a * (a - 1));
            double c = Math.cbrt(m / 4);
            BigDecimal temp = new BigDecimal(c);
            c = temp.setScale(7, BigDecimal.ROUND_HALF_UP).doubleValue();
            if (c - (int) c == 0) {
                System.out.println(a + "^3+" + (a + 1) + "^3+" + "……+" + b + "^3=" + (int) c + "^3");
            } else {
                System.out.println("cannot find");
            }
            long millis1 = System.currentTimeMillis();
            System.out.println("计算所用时间:" + (millis1 - millis) + "毫秒");
        }
    }
    

总结

  • Java之父是詹姆斯•高斯林(James Gosling)

  • Java体系架构分3个平台:Java SE(基础)、Java EE(企业)和Java ME(微型)

  • JDK(Java Development Kit,Java开发工具包)是Sun公司提供的一套用于开发Java程序的开发包

  • JRE(Java Runtime Environment,Java运行环境)是运行Java程序所依赖的环境的集合

  • JVM(Java Virtual Machine,Java虚拟机)是一个虚构出来的计算机

  • Java是纯面向对象的编程语言,所有代码都在类体之内

  • Java是区分大小写的编程语言,Java程序的源代码文件是以.java为后缀

  • 公共类的类名与Java文件名必须相同

  • 程序必须要有main()方法才能运行,main()方法是整个程序的入口

  • Java源文件以.java为扩展名,编译后的字节码文件以.class为扩展名

  • 使用javac编译.java文件,使用java运行.class文件

  • Java中的注释分为单行注释、多行注释和文档注释

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值