Java基础

Java基础

  • 1.java基础入门
  • 2.第一个JAVA程序详解与开发工具的使用
  • 3.IDEA使用与数据类型详解
  • 4.变量应用
  • 5.类型转换与Unicode编码问题
  • 6.算术运算符和习题
  • 7.类和对象
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.

java基础入门

JAVA基础:
	1990 ,sun microsystems 开发的内部项目 oak ,1994改为名JAVA ,1995年推行
	高级编程语言

sun 2009被oracle收购(74亿美元)

java三个版本:
	J2SE:Standard Edition 基础班 ,核心 。结算系统、桌面游戏、桌面软件
	J2ME:移动版  ;  (安卓也是Java语言开发的)安卓/ios

	J2EE :企业版。 大型系统、大型网站

java1.1   1.2  1.3  1.4  
java1.5 ,为了纪念重大升级:
①
	J2SE: java se
	J2ME:  java me
	J2EE:  java ee ->2018 Jakarta EE
②java5 java6  java7 java 8 ..java 12


oracle 2017 将J2EE共享了Eclipse基金会。
Eclipse基金会2018年  :J2EE -> Jakarta EE(雅加达)

java 20186个月更新依次


java是一个门跨平台语言:一次编写 处处运行

java能够跨平台的原因,是因为有各种类型的jvm,且各个jvm不跨平台


写代码(java) ->编译(class->执行class

jvm:java虚拟机  java virtual  machine

jre:java运行环境,java runtime environment ,      jvm + 核心类库  :只能运行JAVA程序,但不能开发   
jdk: jre+运行环境工具,java development kit  :既能运行JAVA程序,又能开发


jvm<jre<jdk

开发人员需要下载并安装jdk

jdk版本建议  jdk8u192及以前版本 (免费)

oracle:2019.1月之后  jdk收费

下载jdk:
	 jdk8u192及以前版本 
	 对于当前系统和位数 windows/linux/mac  32/64

安装jdk:
	注意:安装目录 只能又英文、数字 或下划线(.一般不建议)
	其他都不能写,否则可能出现 :汉字、特殊符号、空格
	在安装jdk时,会自动提示安装jre(可选择)


windows配置环境变量(大小写不区分):
	新建java_home:jdk的根目录  D:\Java\jdk1.8.0_71

	path(必须)D:\Java\jdk1.8.0_71\bin  ;执行命令时,就会在path找相应的软件


	新建(类路径)classpath:  .;D:\Java\jdk1.8.0_71\lib

	两部分:自己写的. + 别人写的 (排序、安全、算法)


验证:
	cmd(win+r)
	如果出现java -version 则说明配置成功
java语言是区分大小写的
	

写第一个java代码:

写代码(.java) ->编译(.class,字节码,相当于二进制,可以被计算机直接运行)->执行class



编译命令javac
	javac 文件名.java

执行java
	java 文件名

Java基础_第1张图片

第一个JAVA程序详解与开发工具的使用

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


1.class 后面的 称之为“类名”
2.public class后面的类名 必须和文件名保持一致
3.一个文件可以多个类(class),但是只能有一个 公共类(public class)
4.System.out.println("hello world");输出语句
5.每个语句以分号结尾 (程序中的一切符号都是 半角英文符号;6.大括号(各种括号)成对出现,注意缩进
7.程序的入口就是main()方法  (其他语言称之为 函数)


System.out.println();带回车的输出语句
System.out.print();不带回车的输出语句

转义符\ 
\n:回车
	
System.out.println("aa\na"); 先执行()中的各种操作,最后在ln回车




\t:制表符   
	补满一定位数 :
		cmd/Eclipse 中 补全8位



如果在.java文件中有汉字,并且在Javac编译时出现了 错误提示“ 错误: 编码GBK的不可映射字符”
解决: 将文件的编码改为ANSI码


注意java采用的默认 字符编码集是unicode


注释:
	单行注释 //
	多行注释 /*...*/		不能注释 */

	文档注释  /** ..*/  ,将程序生成一个说明文档,则说明文档中的  说明文字就是通过文档注释生成的


开发工具
	notepad++ cmd
	Intellij Idea(推荐)、	Eclipse
一、Eclipse:下载zip格式的(packages)->解压缩 直接打开eclipse.exe即可
	(第一次打开时 会提示“...workspace”:选择工作目录,即将 代码 保存在哪个文件里)

使用Eclipse:新建项目-FIle->new -> Java Project -> 输入项目名字(骆驼峰命名MyFirstProject) +选择或配置jdk(jre)

创建类:
	src右键->new ->Class->输入类名
类名:骆驼峰命名

Eclipse中修改字体:
	window->Preference ->General ->Apprearence ->COlor and Fonts ->Basic ->Text font
快捷键: 自动补全 alt+/ (例如ma,syso)


二、Idea(推荐)

	下载 极限版 zip格式,

	create new Project - >选择本地jdk ->下一步 (项目名) 

	src右键->new ->Class->输入类名
	改字体大小: file->settings -> general ->font 

	main快捷写法:psvm +tab
	输出语句: sout +tab
	多行注释:选中 ctrl+/


变量
	变量存在于内存中(程序结束、计算机关机之后 变量失效)

	变量像宾馆

	宾馆:1.申请房间类型(单人间、双人间、...2.入住(b209)	  3.使用
	变量:1.声明数据类型(整数、小数、字符串、....)	2.赋值(变量名)	  3.使用

java数据类型:
	a.引用数据类型(对象类型): String  ...字符串(放任意字符,并且需要用 双引号引起来)
	b.原生数据类型(基本数据类型):8,
		数字:
			整数:byte<short<int<long 	默认int
			小数:float<double 		默认double
		一般性原则: 尽量使用 最小范围。  int age = ...
		

		非数字:
			字符char   : 只能放一个 字符。并且需要用 单引号引起来
			布尔boolean : 只有true/false 

计算机是二进制: 0  1(连通 断开)
字节byte=8个bit组成(-128--  127)
短整数short=2byte (16bit)
整数int=4byte (32bit)   
长整数long=8byte(64bit)

整数范围<小数范围

float = 4byte(32bit) 
double = 8byte(64bit)

=:赋值符号,将=右侧 赋给左侧)

变量名规范:首字母小写的 驼骆峰 myFirstVariable


	
	
对于=转换器问题:
小数 不带转换器:
float x = 123.4 ;是错的。按以下方法解决
float xx = 123.4f ;
float xxaa = (float)123.4 ;

整数自带转换器:
byte b = 123 ;

变量名可以代表变量值
 System.out.println(b); 表示输出123

变量名不能重复(房间号不能重复)

变量区分大小写(java区分大小写)
	
(局部)变量使用前必须赋初值


java可以直接表示的进制:
	二进制 :0b数字    0b011表示3
	十进制(默认)
	八进制: 0数字	   011 表示9
	十六进制:0x		

int num2 = 72 ; 
以下两步的组合:
int num2 ; 
num2 = 72 ;
变量命名规则(强制性):
	首字母 + 其他
	myFirstNum = m + yFirstNum

	a.首字母: 各国语言,下划线,钱
	b.其他:首字母  + 数字
	c.不能是关键字 (idea中蓝色字体 都是关键字 )
	-d.符号只能是下划线、钱
变量的范围:最近一对大括号{}


建议:驼骆峰	myFirstNum = 10 ;


示例:
使用以下变量存储手机信息 并打印输出
品牌  iphone     
尺寸  4.0
像素	1080px*768px
架构	5288


+两种用法: 数字加法、字符串拼接

import java.util.Scanner;
import jdk.nashorn.internal.parser.Scanner;

自动导包问题:
	开启:file-settings - Editor-general-auto import
	注意:如果没有自动导入,可能原因 就是该类 在当前环境中存在重名。需要手工导入: alt+回车
默认包:java的默认包就是java.lang ,即该包中的所有类 会被自动导入,因此不必再写import ...


从控制台输入:
Scanner input = new Scanner(System.in);
input.nextXxx() ;接收各种类型(除了char)

接收字符串:next() 、nextLine()
  String name = input.next() ;
  String name = input.nextLine() ;
next() 和nextLine()的区别:
	
	next()不接收空格、回车,并且将空格、回车作为终止符号
	nextLine()接收空格、回车

阅读异常:
从上往下看,第一行自己写的 (最后标有出错的 类名 和行号)




Scanner中有很多 类型的输入方法,但是没有接受char的方法。  

注意int是整数,所以 int num =( 1+1+2 )/3,则num的值是1


数据类型的转换:
	1.自动转换
		范围小的类型 可以自动转换(赋值给)为范围大的类型
		范围小的类型【遇到】范围大的类型,自动转为范围大的
			int a = 10 +3.14 ; int= double  ×
		整数<小数 
		“最大是字符串” :任何类型遇到字符串,自动转为字符串
		char<int
		java默认使用unicode编码 (unicode兼容于ascii)
	 char ch = 'A' ;
        System.out.println(ch);
        System.out.println(ch+0);
	
	2.强制转换
		范围大的 赋值给 范围小的,必须强转
	通用写法:
		范围小  =  (小类型)范围大 ;
	特殊:
		float x = 1234.5f ;
		
习题

建议:给符号两端预留空格

+ -   *

/  
%:求余,取模


关系运算符(比较运算符):
	> <  >=  <=  == !=
	字符串 相等 equals()   !equals()
	关系运算符运算结果->布尔值

变量:num
表达式:num*122 

	遇到优先级问题:小括号    1+ 3*2

	3 >= 3 true     3大于33等于3



两数交换:中间变量、加减法(溢出)、位运算

% :有符号问题, 结果永远与被除数一致

逻辑运算符
	!:不等于

真 且 假 ->结果 是真?假?

两个符号:根据真值表判断 (短路特性)
	&&
	||
一个符号:一切都会判断
	&
	|

a = a + 2;
a += 2 ;


i++: 先用后加
++i:先加后用

结论:
	byte,short特殊情况
	byte = byte + byte ;×
	byte += byte ; √



字符串判断相等 equals()   !equals() 

三目运算符:
	
	x = 布尔判断 ?  为真时返回 :为假时返回 ;








IDEA使用与数据类型详解

变量应用

类型转换与Unicode编码问题

算术运算符和习题

类和对象

类和对象:
类是抽象的,人
对象是具体的,张三


多个对象,可以抽象出 类
类 可以产生多个对象

物品,这个桌子
类和对象的 组成部分:
 静态:属性(属性名,属性值)  ,身高 体重 年龄 ,颜色、  形状
 动态(功能):方法  ,吃饭 睡觉     , 支撑

桌子:类
这个桌子 :对象

类可以细分,但细分并不一定是对象。  例如  人:男人 女人

int num = 10 ;
String str = "zs"  ;

类 对象  = new 类() ;
public class Person{}


Person zs = new Person() ;

Person ls = new Person() ;

Person ww = new Person() ;


方法是多个对象共享的
属性 是各个对象独有的



Person  zs= new Person();
一般而言,对象 是指堆中的东西....
栈里面zs的 称为引用
引用:相当于C语言的指针。持有对象的 内存地址



但是 根据Everything is an Object

属性:就是全局变量,
全局变量:方法以外,类以内;  有初始值(数据类型的默认值 int 0)
局部变量:方法内部 ;没有初始值,在使用前 必须赋初值

局部变量可以和全局变量重名,并且局部变量优先级高


new:实例化
对象使用前必须先实例化/实例化(new)


方法的调用的常见情况:

同一个类中:

	都有staitc,或都没static,或 没的调有的:直接调用
有static,
	=====有static  不能直接调用   没有static的方法====
		static->static

不在同一个类中:
	万能方法:  new 对象,对象.方法() ;
		          Person2 p = new Person2();
      			  p.eatFruit();
	调用的另一个方法必须是静态的:Person2.eatFruit(); //类名.方法()  其中的方法必须是static修饰的


static方法 是 类级别的,属于类
非static方法 是 对象级别,属于对象

对象.static方法()   对象.非static方法().static方法() 
类有的,对象自然有;
对象有的,类不一定有


静态方法
 public static void eatFruit(){...}

非静态方法:
 public void eatFruit(){...}



方法:
	动态、功能
	类中
	对象.方法()
	类名.static方法() ;

	如果在同一个类中: class A{  a() ; b(); } ;
	public void a()
	{
		b() ;
	}



返回值
	有返回值		public int  a(){
				return 1 ;
			}

			public String  a(){
				return "zs" ;
			}

	public 返回值类型  方法名()
	{
		return 类型对应的数据 ;
	}


	无返回值(返回值为void)

在调用有返回值的方法时,需要接收 String  xx = a1() ;


main()
{
	....
}
	
面向对象编程:类和对象、  将功能独立的写在方法中
a()
b()
c()

main()
{
	a();
	c();
}

从键盘接收,计算三门课的平均成绩、总成绩


有参 无参 :
	


多个元素的类型相同->数组

多个元素类型不同->/对象

class Person
{
	String name;
	int age ;
	double height ; 
}


public void xx(参数列表)

参数列表必须满足:类型、个数、顺序完全一致



题目:有3个学生,每个学生有姓名、2门成绩; 计算每个学生的平均分、总分,


并按总分降序输出(姓名、总分、平均分)。



	int[] nums = new int[]{1,2,3} ;
	String[] names = new String[]{"aa","bbb","ccc"} ;
	类型[] 数组名 =new 类型[]{ 元素值,元素值,元素值} ;
	Student[] students = new Student[]{ stu1,stu2,stu3  };   --对象数组




           if(nums[i]>nums[i+1]){
                   
                   	int temp = nums[i] ;
			nums[i]  = nums[i+1] ;
			nums[i]  = temp ;
                }





用户

猜拳游戏:
对方角色:1张三 2李四  3王五  

介绍出拳规则:1剪刀  2石头  3布
选择


出拳:2 、计算机随机出拳1


每局完后,询问是否继续


结束后,输出结果:赢了?输了?    一共几局、赢了几局、输了几局





人: 身高 体重 姓名  ->基本类型

人: 地址



public class Address
{
	String homeAddress;
	String schoolAddress ;

}


public class Person
{
	Address address ;
}


Java基础_第2张图片
Java基础_第3张图片
Java基础_第4张图片

Java基础_第5张图片

Java基础_第6张图片

Java基础_第7张图片

你可能感兴趣的:(Java基础)