第一节Java入门课 原

一开始是一段很艰难的过程,因为学Java,就像尽快写程序,但Java不是一个很初级的技术,我们不得不理解一些概念。

当写了第一个程序以后,你会发现剩下的都不算太困难了。

如果理解不了,那么试着将代码多敲几遍,熟能生巧,该理解的都就理解了。

So,鼓足勇气越过这个坎吧!

既然要学编程,就要先弄明白什么是程序。(思考一下)

一般课本、教程有一个简单的定义:程序=数据结构+算法

???为什么越来越不明白了?刚才是一个陌生的名词,现在是两个???

用大白话解释程序:

    我让你站起来,走到门口,打开门,跳出去,再跳进来,关上门。

我说一句你做一句,这叫命令。

把这些命令写在一张纸上给你让你去做,那么写在纸上的就是程序。

但是!你写的程序,不是给人看的,是给比人傻n倍的电脑!

所以只能简化、简化,最后简化出一门语言叫Java。这样就可以让计算机看懂了。

怎样才能让计算机看懂Java呢?需要从网上下载一个JDK(Java开发工具),安装之后就可以让计算机看懂Java了。

现在我们拿出一张“纸”,换做计算机就是打开记事本,新建一个.txt文件。

试想,如果在纸上写一篇文章,一般人都会从上往下看,这是人类的一个约定俗成的规矩。

但计算机不同,计算机会找一个特定的位置开始读,这个位置叫程序的入口,在Java中程序的入口叫main方法(函数)。

---|什么是方法(函数)?

    晚上要熄灯了,外面宿管阿姨大喊一句:同学们,熄灯了!然后你去熄灯。这就是方法的运用。

    也就是说,你会熄灯,阿姨也知道你会熄灯,所以命令你去熄灯。

    阿姨不管你是用手关灯还是用脚关灯,她只知道喊你熄灯,在程序设计中把这个叫做“方法的调用”。

Java语言中的main方法是固定的格式:

public static void main(String[] args){

}

现在还没有必要去纠结这些单词的意思,到后续慢慢就会讲解各个关键字的意思。

花括号包含了一块区域,这块区域是你要指定计算机完成的命令。

但是Java不能直接写main方法,因为Java是面向对象的思想设计的。

    这种思想非常重要,不理解面向对象就没办法成为一个Java开发者。

面向对象最基本的概念——类和对象

如果我拿着一台笔记本电脑被你看到了,你会说,哦?你拿着一台笔记本电脑。

我的问题来了:你咋知道这是笔记本电脑的?难道你背过笔记本电脑的定义?

    肯定不会的,因为大多数人一眼就能看出来这是笔记本电脑。

那一生下来就知道这是笔记本电脑吗?

    更不可能了!那肯定在出生到认识之间发生了一件事情。

我还小的时候,不会说话,我爸爱去钓鱼,第一天,我爸钓了一条鲤鱼,拿着放我面前,“宝贝!鱼~”。

我也不会说话嘛,就先记下吧,这是“鱼”。

过了几天,我爸从菜市场买回来两条胖头,放我面前,“宝贝!鱼~”。

我:?????这特么是啥???

又过了几天,我爸去网上下了几条比目鱼的图片,放我面前,“宝贝!鱼~~~”。

我:?????????????????

这都啥跟啥!!!!

这个过程你也没有了解关于鱼的定义,只是最后在脑海里有了一个模型:

    凡是符合一些什么什么特征的,我们把他称之为“鱼”。这就是形成了一个概念。

Java里的类就是这个概念。所以类只是一个概念

在计算机里,不存在就是指内存里不存在(内存就好像人在清醒状态下的大脑)。

好了,问题来了:

    笔记本电脑是什么?

再举个栗子,我想买个空调,空调是什么?

我现在大三了,想找个女朋友,女朋友是什么?

找到女朋友了,假设叫美美,牵上手了,美美是什么?

回到主题,Java是纯粹的面向对象的程序设计语言,所以Java都是一个个的实现的。

类里边有属性和方法,方法里是一条一条的“命令”,也就是程序语句。

所以一开始我们先来定义一个类:

public class MyDemo1{

}

Java是严格区分大小写的,如果写成

PUBLIC,CLASS,

这样的,都是错误的!

至于class后面的,那是这个类的名字,就好比说:

public class Person{

}

这是“人”类

public class Animal{

}

这是动物类

注意起名的时候,每个单词的首字母都需要大写,这叫“驼峰式命名”。

类名也区分大小写,MyDemo1与mydemo1是两个不同的类!

好了,下面把main方法加进去,于是代码变成了这样:

public class MyDemo1{
    public static void main(String[] args){

    }
}

保存的时候要记住,后缀名要改成.java格式!否则就只是一个普通的文本文件。

存盘的文件名要与你在文件里起的名要一致!这是强制性的

嗯哼,休息一下吧~~~~

------------------优美的分隔线 ̄へ ̄----------------------

有了这个基础之后,咱们可以写第一个程序了。

public class MyDemo1{
    public static void main(String[] args){
        System.out.println("Hello world");
    }
}

利用cmd命令提示符,可以对写好的java文件进行翻译。

因为写的代码是你能看懂的,但是计算机还看不懂

所以需要翻译成计算机能看懂但你看不懂的,也就是javac命令转换成“.class”文件。

    javac MyDemo1.java

转换完成后就可以使用java命令去执行程序了!

    java MyDemo1

注意这里面没有.class了!

运行之后可以发现在dos窗口中有了一行Hello world,证明程序运行成功了!

下面我们来写一个小的App:画满天星

我们利用专业的代码编写工具:eclipse来写,这样会轻松的许多。

既然是画画,那肯定需要展现在一个窗体上吧。

    应用的窗体那么复杂,怎么搞呢?

Java在提供JDK的时候,里面有7000+个类,其中有一个就是窗体类。

-------|不要把这些类背下来,根本没用,后续学习的时候只需要记住一些常用的就行(真不多)

那开始写了:

怎么把这个类拿过来呢?

import javax.swing.JFrame;

public class MyDemo1{
    public static void main(String[] args){

    }
}

import语句叫:伙计,把窗体那个类借我用一下(〃'▽'〃)

疑问出现了:借就借呗,咋还那么长呢?

    类忒多了,得分类啊!所以出现了javax.swing这个二级文件夹。

好了,借过来这个类,下一步要创建了:

import javax.swing.JFrame;

public class MyDemo1{
    public static void main(String[] args){
        JFrame frame = new JFrame();
    }
}

请注意新添加的代码:这句话就是将一个不存在的概念转换成一个存在的实体

-------|可以先这么理解:女朋友 美美 = 新 女朋友();

-------|先理解一个概念:Java中的等号“=”代表赋值,而不是数学中的相等。

创建新的对象,用new关键字,代表让计算机在内存中给我分配一块空间

new JFrame();

这段语句,就是让计算机给我分配一块内存,用来创建窗体。

在内存空间中,可以这样划分内存结构:

其中就像薯片桶,先放进去薯片最后再吃,后放进去的先吃;就像是一个仓库,很大。

执行new JFrame();之后,内存变成了这样:

再看等号左边,既然等号是赋值,那么左边通常是一个变量,用来接收右边的值。

在计算机内存中,new一个JFrame的对象之后,就没法找到它了,迷路了!

如果用一个变量来记录它在内存中的位置,那以后是不是就好找了呢?

所以用一个变量叫“frame”来记录。

Java是强类型语言,所有的变量都需要声明变量的类型,就好比可比克的薯片就应该在包装上标明“可比克”。

所以在frame变量的前边要加上JFrame,代表这个frame变量时JFrame类型的。

此时内存的状态变成了这样:

这个JFrame被frame变量记录了!此时这个对象,一切都在我们的掌握之中。

这个frame叫“引用”!(换做C++中叫指针,可以比较形象地理解)

下面要让这个窗体显示出来:

import javax.swing.JFrame;

public class MyDemo1{
    public static void main(String[] args){
        JFrame frame = new JFrame();
        frame.setVisible(true);
    }
}

这里的新代码,是变量之后加一个“.”,就像遥控器遥电视一样,让你干一件事:设置可见性-->是

-------|女朋友.做饭();

-------|女朋友.洗衣服();

-------|女朋友.购物();

编译、运行之后发现窗体贼小!

    证明计算机比我们还懒!能小绝对不大一点点!

所以我们要设置窗体的大小:

import javax.swing.JFrame;

public class MyDemo1 {
	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.setSize(800, 500);
		frame.setVisible(true);
	}
}

这里需要声明一点:Java不允许把星星画到窗体上(就好比不能把画直接画墙上)。

需要把星星画到画布上,再把画布放在窗体上(挂在墙上)。

这里一个好消息和坏消息:

    好消息:7000+个类里面还真有一个画布

    坏消息:上面没有星星 ̄へ ̄

按照上面的步骤:

    1. 伙计,借我画布用一下(〃'▽'〃)

    2. 女朋友 美美 = 新 女朋友();

    3. 画星星

    4. 把画布挂在墙上

错!这叫面向过程,不叫面向对象!

就好比我前面说的“站起来,走到门口,打开门,跳出去,再跳进来,关上门”,这一条条的命令,连起来,叫面向过程。

面向对象是:如果有一个类已经存在了,想在此基础上加工,用继承

比方说:

    动物会吃喝拉撒睡,人也会,那么人就是继承动物啊,自然人也有吃喝拉撒睡了。

所以需要新建一个类,叫MyPanel:

import javax.swing.JFrame;
import javax.swing.JPanel;

public class MyDemo1 {
	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.setSize(800, 500);
		frame.setVisible(true);
	}
}

class MyPanel extends JPanel {

}

继承使用extends关键字。

这里没用public,是因为这个类名不跟文件名一致,所以不能用!

--------|Java允许在一个.java文件中写多个class,但只能有一个public类,且与文件名一致

现在MyPanel已经有JPanel的所有方法了。

--------|如果JPanel里有50个方法了,那么MyPanel也就有50个方法。

现在我们要给MyPanel新写一个方法(上面的部分代码省略了)

class MyPanel extends JPanel{
	public void paint(Graphics g) {
	
	}
}

现在问题来了:MyPanel里有多少个方法?

    还是50个。

    因为这个方法在JPanel里已经有了。

-------|人的吃能跟动物的吃比吗?肯定不行的,所以需要“重写”吃这个方法。

这个paint方法是系统调用画图时执行的。

出现了一个新的东西,叫Graphics,这个也需要借:

import java.awt.Graphics;

忙活了这么多,还没开始画呢!先把画布挂上呗!

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Graphics;

public class MyDemo1 {

	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.setSize(800, 500);
		MyPanel panel = new MyPanel();// 生成一个画布的“对象”
		frame.add(panel);// 把这个画布加到窗体里
		frame.setVisible(true);
	}
}

class MyPanel extends JPanel {
	public void paint(Graphics g) {

	}
}

现在该画画了!

画满天星的顺序:

    1. 画黑天

    2. 画一颗星星

    3. 画满天星星

第一步画黑天:设置背景颜色为黑色

在main方法里设置大小下面添加:

frame.setBackground(Color.black);

-------|别忘了Color也需要借过来:

import java.awt.Color;

编译、运行:

黑天了!

第二部画一颗星星:

在自定义的画布里,paint方法里写:

g.drawString("☆", 100, 100);

代表在距离窗体左上角横坐标100,纵坐标100的位置上画一个星星

编译、运行发现:

咦?怎么没有?

    因为画笔的默认颜色为黑色!

所以要在画星星之前加一句:

g.setColor(Color.white);

编译、运行发现:

有了!

下一步:画满天星。

用循环语句:

for(int i = 0; i < 300; i++){
	g.drawString("☆", 100, 100);
}

编译、运行发现:

怎么还是一颗?

300颗都重叠在一起了!

怎么办呢?

让星星的坐标随机生成:

再借一个随机数生成器:Random类

import java.util.Random();

这样画的时候就可以这么写:

class MyPanel extends JPanel {
	public void paint(Graphics g) {
		g.setColor(Color.white);
		Random random = new Random();
		for (int i = 0; i < 300; i++) {
			g.drawString("☆", random.nextInt(800), random.nextInt(500));
		}
	}
}

编译、运行:

成功了!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏哈雷彗星撞地球

设计模式中的设计原则

翻了三本书《设计模式之禅》、《设计模式:可复用的面向对象软件元素》、《Head First 设计模式》,也看了不少博客和关于设计模式原则的文章。关于设计模式有几...

823
来自专栏java学习

面试题59(关于数据结构之栈的理解)

面试题59 2018年1月11日 本期题目 (单选题)编号为123456789的火车经过如图11-1所示的轨道,从左边入口处移到右边出口处(每车必须且只能进临...

2984
来自专栏HansBug's Lab

3555: [Ctsc2014]企鹅QQ

3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 696  Solve...

35816
来自专栏前端新视界

关于面试题 Array.indexof() 方法的实现及思考

这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了。 昨天看到有网友说面试中也碰到过这个问题,我就重新...

2409
来自专栏HaHack

Extempore:实时系统的实时编程语言

介绍 Extempore 实时编程语言和环境,并详细探讨了使用 Extempore 演奏音乐的方法和技巧。

2002
来自专栏企鹅号快讯

一文搞懂宏程序的编程基础,快速入门秘笈

引领机械前沿、机械视频,汽车、加工技术、3D打印、自动化、机器人、生产工艺、轴承、模具、机床、钣金等行业前沿在这里等你 1. 什么场合会用到宏程序编程? 其实说...

2108
来自专栏web前端教室

[先行者周末课程] 日历组件的开发思路讲解&&日历组件在实际工作中的使用方式

各位同学们大家好,今天又到了周日,视频课程的时候。上次咱们讲的是日历组件。 简短的回顾一下上周的内容,免得同学们一时断篇,想不起来身在何方。日历这种东西,初学者...

26710
来自专栏数据结构与算法

HDU 1848 Fibonacci again and again(SG函数)

Problem Description 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的: F(1)=1; ...

3486
来自专栏Danny的专栏

UML图——类图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

4022
来自专栏醒者呆

数据压缩的元老——哈夫曼树精解

数据结构从逻辑结构上可以分为:集合、线性表、树、图 集合中常用的数据结构是背包等。 线性表包括栈、链表、队列等。 树包括堆、二叉树、哈夫曼树等。 图包括有...

4708

扫码关注云+社区

领取腾讯云代金券