JAVA入门系列
Chapter1 入门须知
一.JAVA的项目结构
- JRE:是 Java 的运行环境。面向 Java 程序的使用者,而不是开发者。如果你仅下载并安装了 JRE,那么你的系统只能运行 Java 程序。JRE 是运行 Java 程序所必须环境的集合,包含 JVM 标准实现及 Java 核心类库。它包括 Java 虚拟机、Java 平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。
- JDK:J2SDK(Java2 Software Development Kit),是 Java 开发工具包,它提供了 Java 的开发环境(提供了编译器 javac 等工具,用于将 java 文件编译为 class 文件)和运行环境(提 供了 JVM 和 Runtime 辅助包,用于解析 class 文件使其得到运行)。如果你下载并安装了 JDK,那么你不仅可以开发 Java 程序,也同时拥有了运行 Java 程序的平台。JDK 是整个 Java 的核心,包括了 Java 运行环境(JRE),一堆 Java 工具 tools.jar 和 Java 标准类库 (rt.jar)。
- 二者区别:java 类库的 class 文件(都在 lib 目录下打包成了 jar)和虚拟机(jvm.dll);JDK 主要包含:java 类库的 class文件(都在 lib 目录下打包成了 jar)并自带一个 JRE。
- SRC:源文件,源代码(由自己编写)
- bin:在项目中是隐藏存在的,它里面主要包含的是class文件,也就是电脑编译后的文件,一个电脑程序运行的文件。
二.一个程序最基本的结构
- 第一步,定义一个类:此时你的src文件夹下面想有一个相同名称的java文件出现。
- `
public class 类名{
//这中间将是一个由你定义的主函数
}`
- 在写完类之后我们应当如何调用类呢?
此时则需要我们写一个程序入口去调用类
public static void main (String[],args){
//输出打印语句
System.out.print("Hogwarts'master at large ")
}
此时你就可以调用你的程序
提到类,就不得不提对象
三.面向对象
面向对象,是一种编程思想,下面来介绍几个概念
- 程序:一个工具,我们用来解决问题的途径与工具
- 类:具有相同、相似的属性、特征、行为方式以及功能的一类事物的信息描述 ,他其实是一个并不具有数量概念的抽象描述。e.g.电脑类、医药类、数据类、编程类…无法用明确的定义与数量去划清他们内部的界限。
- 对象:相对于类的模糊与抽象,对象是一个具体的食物,他是具有明确界限感的存在。某一个人、某一台电脑、某一所学校等
- 集合:集合是一个基于对象而建立的概念,就像是数学意义上的集合,它代表的是一些对象,即一些具体事物。
在我们面向对象开发的过程中,我们会在已知对象的基础上,创建一个类,我们所创建的类必须要包含所面向的对象中的每一个行为方法和属性。在成功创建类之后,我们在类中创建对象,每一个现实生活的对象都会在类里有一个映射存在,也就是类中的对象,他们代替我们去进入代码世界,拥有一个数据身份。
四.类的结构
属性 | 方法 |
---|---|
可以有一个数据或者变量来表达的(离散) | 一种行为方式、一种功能的描述(连续) |
e.g. 年龄,民族,语言,信仰 | 一个具有逻辑、调用运算的代码块,比如一个函数 |
五.程序
我们写一个程序的目的是用它来解决问题。
程序的状态:
- 非运行状态: 一些文件 代码+资源
- 运行状态: 进程
- 通过调度计算机资源(CPU RAM ROM IO GPU)来解决问题
- 通过 计算机执行指令 - 代码
五.数据类型
- 基本数据类型:文本 字符char 上限为216
整数型 byte 28
short 216
int 232
long264 此处的数值均带有正负号,所以范围/2
浮点型 float 精度:232
double 精度:264
布尔类型boolean 0/1;true/false - 引用数据类型:String 字符串
类 可以通过引用调用到数据类型
六.定义类(属性&方法)
public class CV {
//创建一个类,CV类
final String nation="中国";
//创建一个最终值,为国籍,此终值不可再次赋值修改
String name;
String birthday;
String hometown;
String sexjudge;
int age;
int num_maincharac;
int num_fans;
boolean sex;
//属性:姓名,生日,家乡,性别输出值(字符串),年龄,主役剧人数,微博粉丝数,性别判断值(布尔值)
public void fameJudge() {
//创建出名程度判断函数
if(num_fans>500000) {
//粉丝数》500000
System.out.print(name+"有粉丝"+num_fans+"人,"+"跻身top!");
}else {
//粉丝数小于500000
if(200000<=num_fans ) {
//粉丝数小于500000但是大于200000
System.out.print(name+"有粉丝"+num_fans+"人,"+"具有top潜力!");
}else {
//粉丝数小于200000
System.out.print(name+"有粉丝"+num_fans+"人,"+"也很棒啦!");
}
}
}
public void Intro() {
//创建一个介绍函数
if(sex) {
//根据布尔值sex的输入进行,性别男女的输出,赋值到 sexjudge属性上
//布尔值默认为false
sexjudge= "男";
}else {
sexjudge= "女";
}
System.out.println("姓名:"+name);
System.out.println("国籍:"+nation);
System.out.println("性别:"+sexjudge);
System.out.println("家乡:"+hometown);
System.out.println("年龄:"+age);
System.out.println("生日:"+birthday);
System.out.println("主役剧数:"+num_maincharac);
//调用名气程度判断函数
fameJudge();
System.out.println();
System.out.println();
}
//程序入口
public static void main(String[] args) {
System.out.println("中抓CV简介");
/**创建一个新对象dmsl
关于创建对象:
关键词:new
格式:类名 对象名= new 类名
*/
CV dmsl= new CV();
//对新对象dmsl各属性进行赋值
dmsl.name ="倒霉死勒";
dmsl.age=29;
dmsl.birthday="1991-11-06";
dmsl.num_fans=420000;
dmsl.num_maincharac=57;
dmsl.hometown="湘西";
dmsl.sex=true;
dmsl.Intro();
CV yz= new CV();
yz.name ="羊仔";
yz.age=28;
yz.birthday="1992-07-08";
yz.num_fans=1150000;
yz.num_maincharac=68;
yz.hometown="马鞍山";
yz.sex=true;
yz.Intro();
CV jxsy= new CV();
jxsy.name ="景向谁依";
jxsy.age=28;
jxsy.birthday="1992-05-18";
jxsy.num_fans=1030307;
jxsy.num_maincharac=54;
jxsy.hometown="西安";
jxsy.sex=true;
jxsy.Intro();
CV sky= new CV();
sky.name ="天空";
sky.age=39;
sky.birthday="1981-12-15";
sky.num_fans=309000;
sky.num_maincharac=94;
sky.hometown="北京";
sky.sex=true;
sky.Intro();
//此数据均为虚构
}
关于类的命名要注意:
类名的命名: 驼峰命名法 首字母大写- 其后的每个单词首字母大写
- 类名要与文件同名,用public 修饰 ,这个类叫做这个文件的主类
- 类名与文件名不同名,不能使用public修饰
七. 属性的封装
- 当我们不希望将一个类中的属性暴露给他人时,我们可以选择将属性封装起来,也就是一定意义上的隐藏。防止该类的代码和数据被外部类定义的代码随机访问。
封装的存在,最主要的功能是当出现问题时,我们通过修改自己的实现代码来解决问题,而不用修改那些调用我们代码的程序片段。 - 类似于终值的定义,封装的格式,就是在属性前面加上private,此时我们将属性限制起来,限制它只能在这个类中被调用;同理当private 用来修饰方法时,则这个方法只能在这个类中被调用。
- 封装后的属性的调用
对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,此处利用SET/GET来访问
public class 修正后CV {
final String nation="中国";
//创建一个最终值,为国籍,此终值不可再次赋值修改
private String name;
private String birthday;
private String hometown;
private String sexjudge;
private int age;
private int num_maincharac;
private int num_fans;
private boolean sex;
//属性:姓名,生日,家乡,性别输出值(字符串),年龄,主役剧人数,微博粉丝数,性别判断值(布尔值)
public String GetName() {
return name;
}
public int GetAge() {
return age;
}
public String Getbirthday() {
return birthday;
}
public String Gethometown() {
return hometown;
}
public String GetsexJudge() {
return sexjudge;
}
public int Get_num_mainchara() {
return num_maincharac;
}
public int Get_num_fans() {
return num_fans;
}
public void Setname(String name) {
this.name=name;//一种赋值,右边的值传递到左边
}
public void Setbirthday(String birthday) {
this.birthday=birthday;
}
public void Sethometown(String hometown) {
this.hometown=hometown;
}
public void Setsexjudge(String sexjudge) {
this.sexjudge=sexjudge;
}
public void Setage(int age) {
this.age=age;
}
public void Setnum_maincharac(int num_maincharac) {
this.num_maincharac=num_maincharac;
}
public void Setnum_fans(int num_fans) {
this.num_fans=num_fans;
}
}
八.方法的分类
- 方法的格式
public 返回值类型 方法名称(参数类型,参数名称){
}
- 返回值类型的不同,我们将方法分类
空白 void,此时我们就不需要在方法的结尾处加上return语句来返回值
public void fameJudge() {
//创建出名程度判断函数
if(num_fans>500000) {
//粉丝数》500000
System.out.print(name+"有粉丝"+num_fans+"人,"+"跻身top!");
}else {
//粉丝数小于500000
if(200000<=num_fans ) {
//粉丝数小于500000但是大于200000
System.out.print(name+"有粉丝"+num_fans+"人,"+"具有top潜力!");
}else {
//粉丝数小于200000
System.out.print(name+"有粉丝"+num_fans+"人,"+"也很棒啦!");
}
}
- 有定义返回值类型,类型包括上面数据类型里的基本数据类型和引用数据类型。此时一定要在方法结尾处加上return语句,来return定义方法时所规定的数据类型。
返回值最终会返回到调用这个方法的语句上
public String fameJudge() {
//创建出名程度判断函数
if(num_fans>500000) {
//粉丝数》500000
System.out.print(name+"有粉丝"+num_fans+"人,"+"跻身top!");
}else {
//粉丝数小于500000
if(200000<=num_fans ) {
//粉丝数小于500000但是大于200000
System.out.print(name+"有粉丝"+num_fans+"人,"+"具有top潜力!");
}else {
//粉丝数小于200000
System.out.print(name+"有粉丝"+num_fans+"人,"+"也很棒啦!");
return result;
//result为返回值,他的值就会被赋值到CV.fameJudge()
//即CV.fameJudge=result
}
}
九.方法的参数
- 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
- 我们可以通过改变参数来进行方法重载,方法重载意义是在同一个类中让两个拥有相同的名字的方法,拥有不同的参数列表。
public 修正后CV(String name,String birthday,String hometown,boolean sex,int age,int num_maincharac,int num_fans) {
if(sex) {
//根据布尔值sex的输入进行,性别男女的输出,赋值到 sexjudge属性上
//布尔值默认为false
sexjudge= "男";
}else {
sexjudge= "女";
}
this.name=name;
this.birthday=birthday;
this.hometown=hometown;
this.sex=sex;
this.age=age ;
this.num_maincharac=num_maincharac;
this.num_fans=num_fans;
System.out.println("姓名:"+name);
System.out.println("国籍:"+nation);
System.out.println("性别:"+sexjudge);
System.out.println("家乡:"+hometown);
System.out.println("年龄:"+age);
System.out.println("生日:"+birthday);
System.out.println("主役剧数:"+num_maincharac);
//调用名气程度判断函数
fameJudge();
System.out.println();
System.out.println();
}
public String fameJudge() {
//创建出名程度判断函数
if(num_fans>500000) {
//粉丝数》500000
System.out.print(name+"有粉丝"+num_fans+"人,"+"跻身top!");
}else {
//粉丝数小于500000
if(200000<=num_fans ) {
//粉丝数小于500000但是大于200000
System.out.print(name+"有粉丝"+num_fans+"人,"+"具有top潜力!");
}else {
//粉丝数小于200000
System.out.print(name+"有粉丝"+num_fans+"人,"+"也很棒啦!");
}
}
return "";
}
//程序入口
public static void main(String[] args) {
修正后CV dmsl= new 修正后CV("倒霉死勒","1991-11-06","湘西",true,29,57,420000);
修正后CV yz= new 修正后CV("羊仔","1992-07-08","马鞍山",true,28,68,1150000);
修正后CV jxsy= new 修正后CV("景象谁依","1991-05-18","西安",true,28,54,1030307);
修正后CV sky= new 修正后CV("天空","1981-12-15","北京",true,39,94,189000);
}